1 min read

ZabbixをDockerへ

2023/03/20追記

以下でZabbix Serverにcurlを入れているが、それはalertscripts用。
しかしmedia-typesにてJavaScriptでAPIコールなどをできるためそちらに移行した。
なのでそれらは不要になった。一応打ち消し線をつけておく。

以下記事

Zabbixが5.0にメジャーバージョンアップしたので、これを機にDockerへ移行することにした

Zabbix公式がDockerコンテナを用意してくれているので神。

Zabbix Docker images

使ったコンテナ

  • zabbix/zabbix-server-mysql:alpine-latest
  • zabbix/zabbix-web-nginx-mysql:alpine-latest
  • zabbix/zabbix-agent:alpine-latest

:latestでもalpineのものになる模様。

改良した箇所

既知の通り、グラフで日本語を使うと化けるのでそれの修正とか。

  • グラフで日本語を使った場合の文字化け対策。
  • curlを入れる。(Slackスクリプトなどへの対応。wgetは元から入ってる。)

tree

.
├── alertscripts
│   ├── slack.sh
│   └── and more...
├── docker-compose.yml
├── dockerfiles
│   ├── ZBXFront
│   └── ZBXServer (deleted)
└── mysql-vars.env

ZBXServer

FROM 'zabbix/zabbix-server-mysql:alpine-latest'
USER root
RUN apk --update add curl wget && \
    rm -rf /var/cache/apk/*
USER zabbix

通知スクリプトのためのcurlを入れるだけ。
wgetは元から入ってるけど念の為。

ZBXFront

FROM 'zabbix/zabbix-web-nginx-mysql:alpine-latest'
USER root
RUN wget https://noto-website.storage.googleapis.com/pkgs/NotoSansCJKjp-hinted.zip && \
    mkdir /NotoSansCJKjp && \
    unzip NotoSansCJKjp-hinted.zip -d /NotoSansCJKjp/ && \
    cp /NotoSansCJKjp/NotoSansCJKjp-Regular.otf /usr/share/zabbix/assets/fonts/DejaVuSans.ttf && \
    rm -rf /NotoSansCJKjp NotoSansCJKjp-hinted.zip
USER zabbix

グラフの文字化けを直すためにGoogleフォントのNoto Sans CJK jpを使う。

docker-compose.yml

version: '3.5'

services:
    zabbix-agent:
        image: 'zabbix/zabbix-agent:alpine-latest'
        restart: 'always'

    zabbix-server:
        image: 'zabbix/zabbix-server-mysql:alpine-latest'
        #build:
            #context: './dockerfiles'
            #dockerfile: 'ZBXServer'
        ports:
            - '10051:10051'
        links:
            - 'zabbix-agent'
        volumes:
            - '/etc/localtime:/etc/localtime:ro'
            - '/etc/timezone:/etc/timezone:ro'
            - './alertscripts:/usr/lib/zabbix/alertscripts:ro'
        environment:
            - 'ZBX_ENABLE_SNMP_TRAPS=true'
        env_file: './mysql-vars.env'
        restart: 'always'

    zabbix-web-nginx-mysql:
        #image: 'zabbix/zabbix-web-nginx-mysql:alpine-latest'
        build:
            context: './dockerfiles'
            dockerfile: 'ZBXFront'
        ports:
            - '80:8080'
        links:
            - 'zabbix-server'
        volumes:
            - '/etc/localtime:/etc/localtime:ro'
            - '/etc/timezone:/etc/timezone:ro'
        environment:
            - 'PHP_TZ=Asia/Tokyo'
        env_file: './mysql-vars.env'
        restart: 'always'

文字列をクォーテーションで囲うのは癖なので許せ。

mysql-vars.env

DB_SERVER_HOST=
MYSQL_USER=
MYSQL_PASSWORD=
MYSQL_DATABASE=

おわり

これだけでZabbix構築できるんやぞ。やらん手はないやろ。
全人類Zabbix使え。