mito’s blog

IT技術メインの雑記。思い立ったが吉日。

zabbix4.0しか触っていないので、zabbix5.0を構築してNW機器を監視してみた

やったこと

zabbix5.0が4.0からどのくらい変わったのか気になるので、NW機器の監視設定を入れるところから触ってみました。
触ってみた感想としては、新機能以外は4.0の知識で特に悩まず設定できます。 ユーザーインターフェースは変更され、メニューが左サイドに配置されています(4.1~4.4の間に変わったものもあるかもしれません)。
また、メディアタイプの初期設定が増えており、RedmineやServiesNowなどチケット管理機能と連携しやすそうです。

環境

Version:zabbix5.0
OS: Amazon Linux 2

1. zabbix5.0の構築

構築手順はこちらを参考にしました。
インスタンス作成を進めるのみで、ものの数分でzabbixが構築できます。
https://qiita.com/qryuu/items/c3fb49b33068d6cbabf1


2. ダッシュボード

ログイン後に表示される画面です。
メニューが左サイドに配置されています。

f:id:mst-it:20200620033858j:plain


3. ホストグループの作成

ホストグループ名「router」を作成します。

f:id:mst-it:20200620034116j:plain


4. テンプレートの作成

テンプレート名「Template_router」を作成し、テンプレート「Template Module ICMP Ping」「Template Module Interface SNMPv2」をリンクします。

f:id:mst-it:20200620034801j:plain


5. ホストの登録

ホスト名「csr-1」、グループ「router」にし、IPアドレスを設定します。
Zabbix5.0では、インターフェースの初期表示がタイプ「エージェントのみ」になっていて、追加をクリックすることで各種タイプのインターフェースの設定が表示されます。
今回はタイプ「SNMP」を追加し、タイプ「エージェント」は使わないので削除します。

f:id:mst-it:20200620034424j:plain


6. テンプレートとのリンク

ホスト「csr-1」にテンプレート「Template_router」をリンクさせます。

f:id:mst-it:20200620035209j:plain


7. 監視の開始

ローレベルディスカバリにより、インターフェースのアイテムやトリガー等も追加されました。

f:id:mst-it:20200620035340j:plain

f:id:mst-it:20200620040008j:plain


8. 障害検知の確認

csr-1を落としました。問題なく検知しています。

f:id:mst-it:20200620035524j:plain


その他

メディアタイプの初期設定

zabbix4.0から、かなり増えています。

f:id:mst-it:20200620040224j:plain


マクロのデータ秘匿

f:id:mst-it:20200620192514j:plain


雑記

そろそろ書こう、と思うだけの日々が続いたので、運動不足解消も兼ねて、書かない日は走る、走らない日は書くと決めたら毎日走っていました。

【Zabbix4.0】監視間隔のカスタマイズで、監視アイテムの取得タイミングをそろえる

やりたいこと

トラフィックの取得タイミングをそろえたい。

例えば、複数の機器のトラフィックを3分間隔で取得するとき、Zabbixサーバのスペックや機器数などにより、トラフィック取得時のXX分がそろうとは限りません。 Zabbix上ではそれで問題ないのですが、他システムと連携するとなると、このずれにより影響が出ることもあります。

まとめ

アイテムの「監視間隔のカスタマイズ」により、実現できます。

監視間隔のカスタマイズ

f:id:mst-it:20200501004558j:plain

設定の説明

項目 備考
更新間隔 0 例外設定や定期設定とは別に取得するため、0にします
タイプ 定期設定 -
監視間隔 m/3s30 3分毎、かつ30秒で実施します


取得結果

f:id:mst-it:20200501004537j:plain

環境

OS:CentOS 7.7
Version:Zabbix4.0

備考

監視間隔のカスタマイズは、特定の状況(日時や曜日を指定)で設定するものと思い込んでいました。
また、公式ドキュメントには様々な設定例も載っていますので参考にしてください。

www.zabbix.com

snmptrapコマンドでlinkDown/LinkUPを疑似的に発生させ、Zabbixのsnmptrap設定を確認する

やりたいこと

本番環境でsnmptrapの設定を確認したい。


まとめ

まず、zabbix serverにsnmtrapの設定を行います(手順は過去記事を参照)

次に、snmptrapコマンドを実行し、ifIndex10のLinkDownを疑似的に発生させます。

snmptrapコマンド LinkDown
snmptrap -v2c -c public localhost '' .1.3.6.1.6.3.1.1.5.3 test i 10

意図通りにifIndex10のLinkDownを検知しました。

最後に、snmptrapコマンドを実行し、ifIndex10のLinkUpを疑似的に発生させます。

snmptrapコマンド LinkUp
snmptrap -v 2c -c public localhost '' .1.3.6.1.6.3.1.1.5.4 test i 10

無事にifIndex10のLinkDownが回復しました。

snmptrapコマンドの説明
snmptrap -v 2c -c public localhost '' .1.3.6.1.6.3.1.1.5.3 test i 10

説明
snmptrap コマンド名
-v 2c SNMPのバージョン
今回は2cを指定
-c public コミュニティ名
今回はpublicを指定
localhost 送信元ホスト
'' 現在時刻
空白でも良い
.1.3.6.1.6.3.1.1.5.4 OID
今回はLinkDownを指定
test OIDを解釈する内容
snmptt.confで変換されるため、使われないので何でも良い
i
今回はifIndexの型のIntegerを指定
10 LinkDownの第一引数
今回はifIndexが入る


環境

OS:CentOS 7.7
Version:Zabbix4.0


備考

検証環境では、監視機器のインターフェースをshutdownして確認しましたが、本番環境ではそうもいかないので。
また、OIDをさらに調べれば、より実際の障害内容に近いtrapを発報できるかと思います。

【Zabbix4.0】正規表現を使ったトリガーで、syslogを効率的に監視する

※Zabbix5.2を元に、丁寧に書いた更新版を投稿しました。Zabbix4.0でも設定出来ます。

mitomito.hatenablog.jp


やりたいこと

syslogを、対応が必要なログ(既知・未知)、対応が不要なログ(既知)の3種類に分けて管理、検知したい。

まとめ

Zabbixには、設定に正規表現という項目があります。
項目としては文字列のフィルタと捉えたほうが分かりやすいかもしれません。

管理 -> 一般設定 -> 正規表現

以下のように、正規表現に対応必要・対応不要なログを設定し、トリガーの条件式に組み込むことで実現できます。


アイテム
名前:syslog検知
タイプ:Zabbixエージェント(アクティブ)
キー:log[/var/log/testlog,[],UTF-8]


正規表現

  • 対応必要なログ
    名 前:include_log01
    条件式:いずれかの文字列が含まれる
     値 :ROLLBACK,AUTH_FAILURE

    名 前:include_log02
    条件式:結果が真
     値 :router0[12]

  • 対応不要なログ
    名 前:exclude_log
    条件式:文字列が含まれない
     値 :LOGIN_EVENT
    条件式:文字列が含まれない
     値 :LOGOUT_EVENT
    条件式:結果が偽
     値 :switch0[12]


トリガー

  • 対応必要な既知のログを検知する
    トリガー名:REQUIRED:{ITEM.VALUE}
    条件式:{Template_zabbix:log[/var/log/testlog,[],UTF-8].iregexp(@include_log01)}=1 or
        {Template_zabbix:log[/var/log/testlog,[],UTF-8].iregexp(@include_log02)}=1

  • 未知のログを検知する
    トリガー名:UNKOWN:{ITEM.VALUE}
    条件式:{Template_zabbix:log[/var/log/testlog,[],UTF-8].iregexp(@exclude_log)}=1 and
        {Template_zabbix:log[/var/log/testlog,[],UTF-8].iregexp(@include_log01)}=0 and
        {Template_zabbix:log[/var/log/testlog,[],UTF-8].iregexp(@include_log02)}=0
    ※対応不要なログが含まれていないこと、かつ、対応必要な既知のログが含まれていないこと


検知結果


その他
1. 条件式の形式が「結果が真」または「結果が偽」のとき、正規表現が使用できます。
2. 条件式の形式が「いずれかの文字列が含まれる」のとき、255文字の文字数制限があります。
 条件式の形式で255文字を超える場合は2つに分ける必要があります。
3. 正規表現は、トリガーの条件式同様、設定のテストが行えます。

環境

OS:CentOS 7.7
Version:Zabbix4.0

備考

 複数の条件を持つ「文字列が含まれる」正規表現は、トリガーの判定で気を付ける必要があります。
トリガーの判定で「=1(文字列が見つかった)」とする場合、すべての条件に当てはまらないと「1(真)」にならないからです。
 そのため、「文字列が含まれる」正規表現を分割するか、一つでも当てはまったら偽になる正規表現を作成し「=0(文字列が見つからなかった)」判定を無理やり文字列が見つかったという体のトリガーとして扱うかになると思います。紛らわしいですけどね。

【Zabbix4.0】snmptrapのLinkDown/LinkUpをインターフェースごとに監視する

やりたいこと

snmptrapのLinkDown/LinkUpをインターフェースごとに障害条件式LinkDown、復旧条件式LinkUpとして監視したい。 また、機器のどのインターフェースがDownしたのか一目で分かるようにしたい。

まとめ

トリガーのタグ設定とsnmptt.confの修正により、やりたいことができます。

以下は、Template SNMP TrapのトリガーlinkDown Trap from {HOST.NAME}を元に、変更しています。

項目名
トリガー名 linkDown Trap from {HOST.NAME} - ifIndex:{{ITEM.VALUE}.iregsub("^.*ifIndex:([0-9]+)",\1)}
障害条件式 {Template SNMP Trap:snmptrap[.*].iregexp(linkdown)}=1
復旧条件式 {Template SNMP Trap:snmptrap[.*].iregexp(linkup)}=1
障害イベント生成モード 複数
クローズに利用するタグ名 ifIndex
タグ ifIndex
タグの値 {{ITEM.VALUE}.iregsub("^.*ifIndex:([0-9]+)",\1)}


snmptt.conf

EVENT linkDown .1.3.6.1.6.3.1.1.5.3 "Status Events" Normal
FORMAT ZBXTRAP $aA $ar linkDown ifIndex:$1 arg:$-*
EVENT linkUp .1.3.6.1.6.3.1.1.5.4 "Status Events" Normal
FORMAT ZBXTRAP $aA $ar linkUp ifIndex:$1 arg:$-*

タグの正規表現でifIndexを拾えるように、FORMATにifIndex:$1を追加します。


障害画面 f:id:mst-it:20200420194732j:plain

環境

OS:CentOS 7.7
Version:Zabbix4.0

備考

linkDownとlinkUpを別々に検知する=それぞれチケットが起票されるため、一つにまとめたら運用の負荷を下げられるかなと。