dockerでzabbix4.0+elasticsearch環境構築

公開日:2019-07-07
最終更新:2019-07-14

zabbixの公式イメージが有るようなので、これを利用。
ログ等の保存先としてelasticsearchを使えるようになってたので、ついでにこれもテスト。実験的サポートみたいだけど。

windows(のpowershellコンソール)からphotonOSのdockerをつついてるため文の改行区切りに`を使ってます。linuxなら\だろうし、そこら辺は環境にあわせて。
なお、現時点ではデータ保存を一切考慮してないので、コンテナ止めるとデータも全部消えます。

以後何度か出てくる 192.168.1.210 ってIPはdocker実行しているphotonOSのIPです。

elasticsearch & kibana

elasticsearchとkibanaのコンテナを起動

PS D:\> docker run --rm --name elasticsearch `  
-e "discovery.type=single-node" `  
-p 9200:9200 -p 9300:9300 `  
-d docker.elastic.co/elasticsearch/elasticsearch:6.8.0  

PS D:\> docker run --rm --name kibana `  
-p 5601:5601 `  
--link elasticsearch `  
-d docker.elastic.co/kibana/kibana:6.8.0  

kibanaのほうにつけた、--linkオプションで、elasticsarchのコンテナと同じネットワーク下になるのか、コンテナ間で通信可能に。
今は--networkを使う方が推奨らしいけど、それは追々覚えるとして。
注意点は、zabbixではelasticsearch7系はサポートしていないこと。これで数時間を無駄に、、、
7系ではtypeが廃止され_docになったことに起因しているようだが詳しくないので、そういうもんだということで、、、詳細は下記で。
https://support.zabbix.com/browse/ZBX-16013

elasticsearch アクセステスト

windows PCからelasticsarchに対してブラウザアクセスでテスト。
IPはdockerホストであるphotonOSのIP、ポートはelasticsearchの-pオプションで指定したポート。
http://192.168.1.210:9200/_cat/health?v
ヘルスチェックが表示されればOK

kibana アクセステスト

windows PCからelasticsarchに対してブラウザアクセスでテスト。
IPはdockerホストであるphotonOSのIP、ポートはkibanaの-pオプションで指定したポート。
http://192.168.1.210:5601
それっぽい画面でればOKだが、僕の環境ではfirefoxでは上手くいかず、chromeなら上手くいったので注意。

elasticsearch マッピング定義

curlがあってelasticsearchにアクセス出来れば何処でも良かったんだが、無かった&コンテナのコンソールアクセス方法を試すことに。

PS D:\> docker exex -u root -it elasticsearch /bin/bash  

上記でコンテナ名elasticsearchのコンソールに、rootでアクセス、シェルはbashで接続。

elasticsearchを全く分かってないの投入するマッピング定義はzabbix公式ドキュメントのものをそのまま。

curl -X PUT http://localhost:9200/text -H 'content-type:application/json' -d '  
{  
 "settings" : {  
    "index" : {  
       "number_of_replicas" : 1,  
       "number_of_shards" : 5  
    }  
 },  
 "mappings" : {  
    "values" : {  
       "properties" : {  
          "itemid" : {  
             "type" : "long"  
          },  
          "clock" : {  
             "format" : "epoch_second",  
             "type" : "date"  
          },  
          "value" : {  
             "fields" : {  
                "analyzed" : {  
                   "index" : true,  
                   "type" : "text",  
                   "analyzer" : "standard"  
                }  
             },  
             "index" : false,  
             "type" : "text"  
          }  
       }  
    }  
 }  
}'  





curl -X PUT http://localhost:9200/log -H 'content-type:application/json' -d '  
{  
 "settings" : {  
    "index" : {  
       "number_of_replicas" : 1,  
       "number_of_shards" : 5  
    }  
 },  
 "mappings" : {  
    "values" : {  
       "properties" : {  
          "itemid" : {  
             "type" : "long"  
          },  
          "clock" : {  
             "format" : "epoch_second",  
             "type" : "date"  
          },  
          "value" : {  
             "fields" : {  
                "analyzed" : {  
                   "index" : true,  
                   "type" : "text",  
                   "analyzer" : "standard"  
                }  
             },  
             "index" : false,  
             "type" : "text"  
          }  
       }  
    }  
 }  
}'  

確か投入後にwindows PCからもちゃんと出来てるか確認したのだが、コマンドのメモが残ってなかった、、、多分こんな感じ?違ったらごめんなさい
http://192.168.1.210:9200/log/_mapping

ここからzabbixのセットアップ

と言いつつ最初はDBだけど。

DB起動

PS D:\> docker run --rm --name mysql-server `  
-e MYSQL_DATABASE="zabbix" `  
-e MYSQL_USER="zabbix" `  
-e MYSQL_PASSWORD="sqlpassword" `  
-e MYSQL_ROOT_PASSWORD="sqlrootpassword" `  
-d mysql `  
--character-set-server=utf8mb4 --character-set-server=utf8mb4_bin `  
--default-authentication-plugin=mysql_native_password  

取りあえずmysqlを使用。まあどれでもよかったんだけど
--character-set-serverと--character-set-serverはmysqlイメージの独自オプション?でDBの文字コード設定。
--default-authentication-pluginも同様だが、mysql8.0.4からはcaching_sha2_passwordがデフォルトで、zabbixはこれに対応していないようなので必要でした。
mysqlのイメージ指定を名前だけにしてたら、このときのlastestである8.0.16だったため。
mysql:5.7 にしとけば多分不要だったはず。

zabbix本体起動

PS D:\> docker run --rm --name zabbix-server `  
-e ZBX_HISTORYSTORAGEURL="http://elasticsearch:9200" `  
-e ZBX_HISTORYSTORAGETYPES="log,text" `  
-e ZBX_STARTDISCOVERERS="2" `  
-e DB_SERVER_HOST="mysql-server" `  
-e MYSQL_DATABASE="zabbix" `  
-e MYSQL_USER="zabbix" `  
-e MYSQL_PASSWORD="sqlpassword" `  
-e MYSQL_ROOT_PASSWORD="sqlrootpassword" `  
-e TZ="Asia/Tokyo" `  
--link elasticsearch `  
--link mysql-server `  
-p 10051:10051 `  
-d zabbix/zabbix-server-mysql  

zabbix公式ドキュメントと必死のにらめっこ。
データの型ごとに、保存先を何処にするか、と言う形の指定の仕方のようでした。
数値はelasticsearchにするメリットも無いだろうと思って変更せず。Character型はかなり迷ったけど取りあえずこれも変更せず。
elasticsearchとmysqlは--linkで指定しているが、これを行ってるとコンテナ内部でリンクしているコンテナもコンテナ名で名前解決できるようで。
ZBX_STARTDISCOVERERSは指定しなくてもいいが、色々試すうちにzabbixのアラートとしてDISCOVERERプロセスのCPUが上がってくるのがウザかったので入れることに。
TZ指定はそのままタイムゾーン指定だけど無かったらどうなるんだろ?最初から付けてたので不明だがUTCになるのかね?

webサーバ起動

PS D:\> docker run --rm --name zabbix-web `  
-e ZBX_HISTORYSTORAGEURL="http://elasticsearch:9200" `  
-e ZBX_HISTORYSTORAGETYPES="['log','text']" `  
-e DB_SERVER_HOST="mysql-server" `  
-e MYSQL_DATABASE="zabbix" `  
-e MYSQL_USER="zabbix" `  
-e MYSQL_PASSWORD="sqlpassword" `  
-e MYSQL_ROOT_PASSWORD="sqlrootpassword" `  
-e PHP_TZ="Asia/Tokyo" `  
--link elasticsearch `  
--link mysql-server `  
--link zabbix-server `  
-p 80:80 -p 443:443 `  
-d zabbix/zabbix-web-nginx-mysql  

こちらでもどのデータ型をelasticsearchに保存するかの指定が必要。
普通に構築するときにはzabbix.conf.phpに該当設定を入れるようだが、これをやってくれるようです。

zabbixアクセス確認

windows PCから下記IPにアクセス。ポートは80を使うようにしてるので指定せずに。
http://192.168.1.210
ユーザー名はAdmin、パスワードはzabbixでした。
ユーザー名はadminではダメで、Adminだとは入れたのでCaseSensitiveのようだけど、2.4もだっけ?

elasticsearchに保存されていることを確認

、、、、ここのメモ全部吹っ飛んでた。
一定時間ほっといたのか、適当にホスト追加したりしたのか、とにかくlogかtext型のデータ保存されたのをzabbix画面で確認してから、ブラウザで直接アクセスして保存されているのを確認
多分こんな感じのコマンドだった、、、
http://192.168.1.210:9200/log/_search?q=*&pretty=true

その他まとめ

elasticsearchに保存されるデータには、アイテムIDはあるんだけどホスト情報が含まれないという割と致命的な問題がありました。
このため、ホスト毎のデータ観たり出来ない。DBにアクセスするなり、zabbix API叩いてアイテムIDから変換すれば行けるのかも知れないが、、、個人的には最低限ホスト情報も保存してくれるようにならないと使う必要無いと感じました。
RDB使うより負荷とディスク容量面でメリットあるとかちらっと見たが、自分で測定してないので割愛。

記事が少しでもいいなと思ったらクラップを送ってみよう!
44
+1
藤枝の技術ブログ

よく一緒に読まれている記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう
目次をみる

技術ブログをはじめよう

Qrunch(クランチ)は、ITエンジニアリングに携わる全ての人のための技術ブログプラットフォームです。

技術ブログを開設する

Qrunchでアウトプットをはじめよう

Qrunch(クランチ)は、ITエンジニアリングに携わる全ての人のための技術ブログプラットフォームです。

Markdownで書ける

ログ機能でアウトプットを加速

デザインのカスタマイズが可能

技術ブログ開設

ここから先はアカウント(ブログ)開設が必要です

英数字4文字以上
.qrunch.io
英数字6文字以上
ログインする