Zabbixの設定変更結果の確認方法のススメ

Zabbix

こんにちは。プラットフォーム技術部の小林(雄)です。

最近は、大規模環境の監視にZabbixを利用しているお客様や、多種多様な監視実装をおこなっているお客様、Zabbixに詳しいお客様が増えており、ご支援の際のご質問やご相談も高度化してきています。

今回はそのようなお客様からよくご相談いただく事例について、当社が実践している内容も交えて紹介させていただきます。

Zabbixの変更作業結果を確実かつ効率的におこなうためには

私たちは「まるごとおまかせZabbix」の「安心Z」というサービスでお客様のZabbixに関する疑問やお悩みごとを解決するサポートをさせていただいております。

そんな中、先日とあるお客様から「運用時に複雑な設定変更作業を大量におこなう際、作業結果を確実かつ効率的に確認する方法がないか」とお問い合わせいただきました。

私たちも普段構築や変更作業を実施する際にはどうしたら作業漏れや設定ミス無く効率的で質の高い仕事をできるのかを考え、日々作業方法や手順の見直しをおこなっています。

今回の記事では、普段私たちがどのような手段でZabbixに対する作業結果の確認をおこなっているのか紹介させていただきます。

設定変更時の確認手段

Zabbixに対する監視設定の変更作業結果の確認手段として考えられるものは以下の通りです。

ZabbixGUIを用いた確認

ZabbixGUIの画面上から目視で確認をおこなう方法です。事前準備や製造等の対応は不要であり最も手軽ですが、機械的に確認することができず、画面推移等のオペレーションを多く挟むことが多いため、確認精度、効率が他の方法と比較した場合やや劣ります。

XMLエクスポート機能を用いた確認

Zabbixの標準搭載機能であるXMLエクスポート機能を利用し、設定情報を抽出して、作業前後の設定を機械的に比較する方法です。事前準備として、比較用のExcelシート等の作成が必要になり、XMLエクスポート機能が対応していない情報の確認はおこなえないという制約があります。

ZabbixAPIを用いた確認

ZabbixAPIを用いて、設定情報を抽出して、作業前後の設定を機械的に比較する方法です。事前準備として、Python等で設定情報抽出をおこなうスクリプトの製造が必要になるため、イニシャルコストは少し高いですが、XMLエクスポートのような制約もなく、比較結果となる差分情報の加工も容易です。

SQLを用いた確認

ZabbixDBへSQLを発行し、設定情報を抽出して、作業前後の設定を機械的に比較する方法です。事前準備としてSQL文の製造が必要になりますが、ZabbixAPIを用いた方法と比較して、イニシャルコストは抑えめです。ZabbixDBの構造をある程度把握できていれば、抽出する情報をその場で選択、加工することができ、柔軟性に優れた方法です。

アークシステムでは?

普段私たちは、以下の点を重視し「SQLを用いた確認」で作業結果の確認をおこなっています。

  • お客様環境に確認用スクリプトを配置する必要がない。
  • 取得対象の情報を柔軟に変更可能。

以降は私たちが実際によく利用するSQLを紹介させていただきます。
SQLは作業前後でそれぞれ取得をおこない、ExcelシートやDiffツールで差分比較をおこなうことで以下を確認します。

  • 無関係な既存設定に変更を加えてしまっていないこと。
  • 作業対象がもれなく登録/削除できていること。
  • 設定値に誤りがないこと。

以下記載のSQLはZabbix4.0、ZabbixDBにMariaDBを利用した環境を対象とした例です。

サンプルSQL文

ホスト、ホストグループの設定確認用SQL

こちらのSQLは主に、新規ホスト、ホストグループの追加をおこなった際に利用するSQLです。
ホストグループ単位で所属するホストとのひもづけを確認できます。

select
 gr.name as hostgroupname,
 ho.host as hostname,
 ho.name as visiblename
from
 hstgrp gr
join
 hosts_groups hg
  on hg.groupid=gr.groupid
join
 hosts ho
  on ho.hostid=hg.hostid
where
 ho.status<>3
order by gr.name;

ホスト設定の確認用SQL

こちらのSQLは主に、新規ホストの追加をおこなった際に利用するSQLです。
設定頻度の高い、エージェントインターフェースとSNMPインターフェースの情報が確認できます。

select
 ho.host as hostname,
 ho.name as visiblename,
 i1.ip,
 i1.dns,
 i1.useip,
 i2.ip as SNMP_IP,
 i2.dns as SNMP_DNS,
 i2.useip as SNMP_USERIP,
 case
  when ho.status = 0 then '[有効]'
  when ho.status = 1 then '[無効]'
 end as status
from
 hosts ho
left outer join (select * from interface where type=1) i1
 on ho.hostid=i1.hostid
left outer join (select * from interface where type=2) i2
 on ho.hostid=i2.hostid
where
 ho.status<>3;

ホストとテンプレートとのひもづけ確認用SQL

こちらのSQLは主にホスト新規登録後の監視開始時に利用するSQLです。
正しい監視設定が正しい監視対象にひもづいているか確認ができます。

select
 ho.host as hostname,
 ho.name as visiblename,
 h1.name as templatename
from
 hosts ho
left outer join
 hosts_templates ht
  on ho.hostid=ht.hostid
left outer join
 hosts h1
  on ht.templateid=h1.hostid
where
   ho.status<>3;

正規表現確認用SQL

こちらのSQLはZabbix正規表現更新時に利用するSQLです。
Zabbix正規表現はログ監視のアイテムに利用されることが多く、ログ監視の監視、非監視条件を設定できます。本SQLでは各正規表現の設定内容について確認ができます。

select
    distinct
    name,
    expression,
    case
        when expression_type = 0 then '[文字列が含まれる]'
        when expression_type = 1 then '[いずれかの文字列が含まれる]'
        when expression_type = 2 then '[文字列が含まれない]'
        when expression_type = 3 then '[結果が真]'
        when expression_type = 4 then '[結果が偽]'
    end as expression_type,
    exp_delimiter,
    case
        when case_sensitive = 0 then 'いいえ'
        when case_sensitive = 1 then 'はい'
    end as case_sensitive
from
     regexps inner join expressions on regexps.regexpid = expressions.regexpid
order by name;

まとめ

Zabbixは非常に多機能で高パフォーマンスであり、さまざまな監視ニーズに柔軟に対応できます。しかしながら監視対象や項目が増えると管理が煩雑になってしまうという側面もあります。

Zabbix設定変更の作業品質を上げるために、作業後に結果確認をおこなうことはもちろんですが、確認の精度と効率を上げるためにも確認方法の工夫が非常に大事です。

今回の記事が何かの参考になれば幸いです。

アークシステムは Zabbix Japan LLC の認定パートナー企業です。 当社はZabbixバージョン1.1の時代から監視ソリューションの活用を進め、Zabbixに関する製品・サービスの販売に加え、Zabbix関連サービスの提供を行っています。

Zabbixに関するお問い合わせはこちらからお願いいたします。

  • 株式会社アークシステムの予約・来訪管理システム BRoomHubs
  • 低コスト・短納期で提供するまるごとおまかせZabbix