Raspberry Pi3でWordPressを稼働させていますが、リソースや攻撃の状態を把握できていないので、Zabbixで監視してみます。
前回に引き続き、Ansibleでセットアップしました。
環境
ハードウェア
・Raspberry Pi Model B+
・外付けHDDドライブ(USB)
OS
・RASPBIAN JESSIE LITE(Raspbian GNU/Linux 8.0)
参考資料
基本的にはZabbixの公式ドキュメントに記載されている手順をそのままPlayboo化しました。
ただし、リポジトリパッケージのインストール(Installing repository configuration package )は行っていません。
これを実施すると、RASPBIAN向けに提供されるパッケージに不整合があるためか、Zabbix関連パッケージ以外のインストールでエラーがでるようになってしまいました。現状では標準のリポジトリでもZabbixのパッケージが提供されているため、リポジトリパッケージのインストールは不要です。
Playbookのファイル構成
ファイル構成は以下の通りです。
前回の構成を踏襲したうえ、zabbixロールを追加しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
base ├─site.yml ├─raspi.yml ├─group_vars/ │ └─raspi ├─host_vars/ └─roles/ ├─common/ ├─dbserver/ ├─webserver/ └─zabbix/ ├─handlers/ │ └main.yml ├─tasks/ │ └main.yml ├─templates/ │ └zabbix.conf.php.j2 └─vars/ └main.yml |
Playbook
roles/zabbix/tasks/main.yml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
--- - name: Install packages apt: pkg={{ item }} state=latest with_items: - zabbix-server-mysql - zabbix-frontend-php - php5-gd - name: Create database mysql_db: name=zabbix state=present encoding=utf8 - name: Create user mysql_user: name=zabbix password={{ db_zabiuser_password }} priv=zabbix.*:ALL,GRANT state=present - name: Check importing schema shell: mysql -uzabbix -p'{{ db_zabiuser_password }}' zabbix -e'select * from maintenances;' register: import_check failed_when: import_check.rc not in [0, 1] changed_when: no - name: Import initial schema and data shell: zcat /usr/share/zabbix-server-mysql/{{ item }}.sql.gz | mysql -uzabbix -p'{{ db_zabiuser_password }}' zabbix when: import_check.rc == 1 with_items: - schema - images - data - name: Database configuration for Zabbix server lineinfile: dest: /etc/zabbix/zabbix_server.conf state: present backrefs: yes regexp: '{{ item.regexp }}' line: '{{ item.line }}' with_items: - regexp: '^# DBHost=$' line: 'DBHost=localhost' - regexp: '^# DBPassword=$' line: 'DBPassword={{ db_zabiuser_password }}' - name: Zabbix default file configuration lineinfile: dest: /etc/default/zabbix-server state: present backrefs: yes regexp: '^START=.*$' line: 'START=yes' - name: PHP configuration lineinfile: dest: /etc/php5/cgi/php.ini state: present backrefs: yes regexp: '{{ item.regexp }}' line: '{{ item.line }}' with_items: - regexp: '^max_execution_time = [0-9]*$' line: 'max_execution_time = 300' - regexp: '^max_input_time = [0-9]*$' line: 'max_input_time = 300' - regexp: '^post_max_size = [0-9]*M' line: 'post_max_size = 16M' - regexp: '^;date.timezone =$' line: 'date.timezone = Asia/Tokyo' notify: restart lighttpd - name: Create zabbix directory file: path=/var/www/html/zabbix state=directory - name: Copy zabbix directory shell: cp -rfd /usr/share/zabbix/* /var/www/html/zabbix/ creates=/var/www/html/zabbix/index.php - name: Ownership changes of zabbix directory file: path=/usr/share/zabbix owner=www-data group=www-data state=directory recurse=yes - name: Place zabbix.conf.php template: src=zabbix.conf.php.j2 dest=/etc/zabbix/zabbix.conf.php mode=0644 - name: Starting Zabbix server process service: name=zabbix-server state=started enabled=yes |
23行目「Import initial schema and data」でデータベースに初期スキーマとデータをインポートしていますが、このままでは2回目以降の実行でエラーとなってしまい、冪等性が維持できなくなります。そのため17行目「Check importing schema」で、インポートされるテーブルが表示できるかをチェックし、表示できない場合のみインポートが走るようにしています。
44行目「Zabbix default file configuration」では/etc/default/zabbix-serverに「START=yes」のみを記述しています。これを実施しないとzabbix-serverが起動しないのですが、なぜかマニュアルには記載されていませんでした。
52行目「PHP configuration」の最後に「notify: restart lighttpd」を記述し、後述するhandlerを呼び出しています。changedになった場合のみ、notifyが送信され、lighttpdを再起動します。
roles/zabbix/handlers/main.yml
1 2 3 |
--- - name: restart lighttpd service: name=lighttpd state=restarted |
notifyを受けるためのhandlerを記述します。lighttpdの再起動を行っています。
roles/zabbix/templates/zabbix.conf.php.j2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<?php // Zabbix GUI configuration file global $DB; $DB['TYPE'] = 'MYSQL'; $DB['SERVER'] = 'localhost'; $DB['PORT'] = '0'; $DB['DATABASE'] = 'zabbix'; $DB['USER'] = 'zabbix'; $DB['PASSWORD'] = '{{ db_zabiuser_password }}'; // SCHEMA is relevant only for IBM_DB2 database $DB['SCHEMA'] = ''; $ZBX_SERVER = 'localhost'; $ZBX_SERVER_PORT = '10051'; $ZBX_SERVER_NAME = ''; $IMAGE_FORMAT_DEFAULT = IMAGE_FORMAT_PNG; ?> |
tasks/main.ymlの79行目「Place zabbix.conf.php」で使用しているテンプレートです。変数部分が置き換えられて配置されます。
roles/zabbix/vars/main.yml
変数です。DBのパスワードを記述しています。
1 2 |
--- db_zabiuser_password: ****** |
※パスワードはマスクしています。
site.yml
1 2 |
--- - include: raspi.yml |
ベースディレクトリ直下に配置し、raspi.ymlの呼び出しのみを行います。
raspi.yml
1 2 3 4 5 6 7 8 9 |
--- - name: Raspberry Pi setup hosts: raspi sudo: yes roles: - common - webserver - dbserver - zabbix |
実行するロールを記述します。zabbixはデータベースとWebサービスが必要なので、common(標準設定)、dbserver、webserverロールを実行したのち、zabbixロールを実行します。common、dbserver、webserverの詳細は前回をご覧ください。
実行結果
RaspberrryPiに接続できる端末でブラウザを開いて以下URLに接続します。
http://<RaspberryPiのIPアドレス>/zabbix/
下記画面が表示されたら、デフォルトのアカウント(アカウント名:Admin, パスワード:zabbix)でログインします。
ダッシュボードの「Status of Zabbix」「zabbix server is running」が「Yes」であればセットアップは成功しています。
画面右上「Profile」で言語設定を日本語にすると、日本語表示にできます。
詳細監視のためには、他にZabbixエージェントもインストールする必要がありますのでご注意ください。
なお、マニュアルは3.2を参照しましたが、インストールされたのは2.2.7でした。まだこのOSには2.2までしかパッケージが提供されていないようです。
最後までご覧いただきありがとうございました。よろしければ広告もご覧ください。