この記事は、ニフクラブログで2019-03-29に公開された記事を移転したものです。
こんにちは、ニフクラテクニカルアカウントチームです。
ニフクラでは、様々な監視機能・監視サービスを提供していますが、Zabbix等オープンソースのツールを利用して監視することもできます。
今回はニフクラRDBをZabbixのDBとして利用する監視構成を検証してみました。
ニフクラRDBを利用するメリットですが、Zabbixサーバーが故障しても、サーバーをリストアしRDBにマウントするだけで復旧が可能になる点です。また、共通グローバル側のネットワークを切り離すことでセキュリティの強化を図ることもできます。他にもニフクラのコントロールパネル(管理画面)からデータベースのバックアップが可能になる、スケールアップやディスク容量の拡張が容易に行えるなどのメリットがあります。
それでは、構成と設定の手順についてご説明いたします。
Zabbixの設定値まで記載しているため長文になりますが、参考にしていただけましたら幸いです。
前提条件
本ブログは、以下の前提知識がある方を想定しています。
- ニフクラの基本的なコントロールパネルの操作、サービスを利用する知識
(サーバー作成、ネットワーク構築など) - Zabbixの構築と設定に関する知識
- Slackを利用する知識
検証概要
本ブログは、以下の検証を実施しています。
Zabbixサーバーの管理DBを分離し、管理DB部分をニフクラのRDBで構築
Zabbixの導入および設定は起動時スクリプトにて実施。(OS設定も含む)以下のZabbix監視設定を実施
・死活監視
・プロセス監視
・リソース監視
・メッセージ監視ニフクラ基本監視設定
・PING監視(Zabbixサーバー)
※Zabbixサーバー自身が停止するような障害はZabbixで検知できないため、ニフクラの基本監視設定を実施。
※ニフクラの基本監視を使用せず、Zabbixのみを使用する場合は、Zabbix自体を冗長化し相互監視する方法もありますので以下の記事を参考にしてください。
ニフクラブログ:ゾーン間冗長構成システムの監視実装検証グラフ出力
・定期的に監視結果をグラフ化し、Slackおよびメール通知障害発生時の通知
・監視対象サーバーの障害発生時にSlackおよびメール通知Zabbixサーバーの障害時想定のテスト
以下の2パターンを実施
・カスタマイズイメージを利用した復旧パターン
・起動時スクリプトを利用した復旧パターン
※RDB障害時はポイントインタイムリカバリーを使用して、新規にRDBを作成し、再度DBをマウントする復旧手順となります。
利用リソース
今回の検証を実施するにあたり、利用したニフクラのリソース情報を以下に記載します。
※各リソースのアクセス制限に関しては、ニフクラのファイアウォール等を用いて適切に設定の上実施しています。
リソース | 数量 |
---|---|
仮想サーバー(サーバーOS:CentOS7.4) | 2 |
プライベートLAN | 1 |
RDB(DBエンジン:MySQL 5.7.15) | 1 |
RDBファイアウォール | 1 |
付替IP(グローバル側) | 1 |
カスタマイズイメージ | 1 |
基本監視 | 1 |
検証内容
準備したリソースを使用し、Zabbixサーバーの設定と、監視対象サーバー障害時の検知(メールとSlackに通知)およびZabbixサーバー自身の障害復旧までの検証内容を記載します。
リソース作成
① RDBの作成
事前に「プライベートLAN作成」、「RDBファイアウォールグループ作成」を実施します。
※詳細な作成方法は、以下を参照してください。
クラウドヘルプ(プライベートLAN:作成)
クラウドヘルプ(RDB:DBファイアウォールの作成)
コントロールパネルから「RDB」-「DBサーバー」-「DBサーバー作成」をクリックします。
DBエンジンを選択します。
本検証では、DBエンジンを「MySQL 5.7.15」とします。
基本設定を入力し、「DB設定へ」をクリックします。
本検証では、以下の設定とします。
項目 | 設定値 |
---|---|
DBサーバー名 | zabbixdb |
ゾーン | west-12 |
DBサーバータイプ | db.e-small |
ディスクタイプ | HDD |
ディスク容量 | 50 |
冗長化 | シングル構成 |
グローバルIPアドレス | 利用しない |
プライベートLAN | PVLAN |
VIP | 192.168.2.30/24 |
マスターDBのプライベートIPアドレス | 192.168.2.31/24 |
ポート | 3306 |
DBファイアーウォール | zabbixdb-fw |
DBパラメータグループ | default.mysql5.7 |
※下記のように基本設定の画面で、冗長化の構成をシングル構成から冗長構成に変更することも可能です。
5. DB設定を入力し、「オプション設定へ」をクリックします。
本検証では、以下の設定とします。
項目 | 設定値 |
---|---|
DB名 | zabbix |
マスターユーザー名 | zabbix |
マスターユーザーのパスワード | ****** |
6. オプション設定を入力し、「確認」をクリックします。
本検証では、デフォルト設定とします。
※オプション設定の自動バックアップを選択することで容易にデータベースのバックアップができます。
7. 設定内容を確認し、「作成する」をクリックします。
8. RDBが作成されたことを確認します。
② 付替IPアドレスの作成
グローバル側に、付替IPアドレスを作成します。
※詳細な作成方法は、以下を参照してください。
クラウドヘルプ(付替IPアドレスの追加)
③ Zabbixサーバー作成
Zabbixサーバーを作成します。(付替IPアドレスの付与も実施)
※詳細な作成方法は、以下を参照してください。
クラウドヘルプ(サーバーの作成)
なお、OSの設定およびZabbixサーバーの設定などは、起動時スクリプトにて実施しています。
起動時スクリプトにて実施している項目は、以下になります。
- スクリプト実行ログの出力設定
- ホスト名の設定
- プライベートLANのIPアドレス設定
- パブリックDNSの設定
- syslogを利用して出力されるログを、 warn や err などのプライオリティ文字列の出力の有無でZabbixでのキーワード監視をするために、ファシリティとプライオリティの情報を出力する設定
- Zabbix3.4のyumリポジトリの登録と、Zabbixに必要なPHPのインストール
- Zabbixのインストール
- SQLコマンドを使用するために、MariaDBのクライアントをインストール
- Zabbixの初期データをインポート
- Zabbixサーバーの設定(RDBのIPアドレス、ユーザー名、パスワード)
- Zabbixエージェントの設定(Zabbixで表示するホスト名の設定)
※メッセージ監視をするために「AllowRoot=1」の設定も実施 - ZabbixのWebインターフェース設定(タイムゾーン設定)
- PHPの設定(Zabbixの推奨値設定)
- Slack関連の設定
※スクリプトはGitHubからダウンロード - Zabbixのグラフを定期的に出力させるための設定
※スクリプトはGitHubからダウンロード - 各サービスの起動と自動起動の設定
スクリプトの内容は後述の「起動時スクリプト(ZabbixServer用)」を参照してください。
④ 監視対象サーバー作成
監視対象サーバーを作成します。
※詳細な作成方法は、以下を参照してください。
クラウドヘルプ(サーバーの作成)
なお、OSの設定およびZabbixエージェントの設定などは、起動時スクリプトにて実施しています。
起動時スクリプトにて実施している項目は、以下になります。
- スクリプト実行ログの出力設定
- ホスト名の設定
- プライベートLANのIPアドレス設定
- パブリックDNSの設定
- syslogを利用して出力されるログを、 warn や err などのプライオリティ文字列の出力の有無でZabbixでのキーワード監視をするために、ファシリティとプライオリティの情報を出力する設定
- Zabbix3.4のyumリポジトリの登録と、Zabbixに必要なPHPのインストール
- Zabbixのインストール
- Zabbixエージェントの設定(Zabbixで表示するホスト名の設定)
※メッセージ監視をするために「AllowRoot=1」の設定も実施 - 各サービスの起動と自動起動の設定
スクリプトの内容は後述の「起動時スクリプト(ZabbixAgent用)」を参照してください。
設定作業
① Zabbixサーバーの初期設定
作業端末のWebブラウザから以下のURLにアクセスします。
http://<ZabbixサーバーのグローバルIPアドレス>/zabbix
「Next step」を選択します。
すべてのチェック項目が「OK」であることを確認し、「Next step」をクリックします。
対象の設定項目を入力し、「Next step」をクリックします。
本検証では、以下の設定とします。
項目 | 設定値 |
---|---|
Database type | MySQL |
Database host | 192.168.2.30 |
Database port | 3306 |
Database name | zabbix |
User | zabbix |
Password | ****** |
5. デフォルトのまま、「Next step」をクリックします。
6. 設定内容を確認し、「Next step」をクリックします。
7. 「Finish」をクリックします。
8. 「Usename」 「Password」を入力し、「Remember me for 30 days」のチェックを外し、「Sign in」をクリックします。
※ユーザー名は「Admin」、初期パスワードは「zabbix」になります。
9. ログイン後、以下の画面が表示されます。
② Zabbixサーバーの監視設定
Zabbixサーバーの監視設定項目は以下になります。
監視項目一覧 ※ここでは「死活監視」できるところまでの設定手順を記載し、他の監視項目の設定手順については割愛させて頂きます。
ホストグループの設定
本検証では、以下の設定とします。
グループ名 |
---|
KensyoGroup |
「設定」-「ホストグループ」-「ホストグループの作成」をクリックします。
対象の設定項目を入力し、「追加」をクリックします。
ホスト作成
本検証では、以下の設定とします。
ホスト名 | 所属グループ | IPアドレス | 接続方法 | ポート |
---|---|---|---|---|
ZabbixSV | KensyoGroup | 127.0.0.1 | IPアドレス | 10050 |
ZabbixCL | KensyoGroup | 192.168.2.20 | IPアドレス | 10050 |
※上記以外の設定項目はデフォルト設定となります。
「設定」-「ホスト」-「ホストの作成」を選択します。
対象の設定項目を入力し、「追加」をクリックします。
監視対象サーバー(ホスト)の数だけ、繰り返し実施します。
テンプレート作成
本検証では、以下の設定とします。
テンプレート名 | 所属グループ | ホスト / テンプレート |
---|---|---|
Kensyo_Template_ping_check | KensyoGroup | ZabbixSV, ZabbixCL |
Kensyo_Template_proc | KensyoGroup | ZabbixSV, ZabbixCL |
Kensyo_Template_OS_resource | KensyoGroup | ZabbixSV, ZabbixCL |
Kensyo_Template_message | KensyoGroup | ZabbixSV, ZabbixCL |
「設定」-「テンプレート」-「テンプレートの作成」をクリックします。
対象の設定項目を入力し、「追加」をクリックします。
テンプレートの数だけ、繰り返し実施します。
アイテム作成(死活監視)
ここでは、「テンプレート作成」で作成した以下のテンプレートを使用します。
テンプレート名 |
---|
Kensyo_Template_ping_check |
本検証では、以下の設定とします。
項目 | 設定値 |
---|---|
名前 | Ping Check |
タイプ | シンプルチェック |
キー | icmpping |
ユーザー名 | - |
パスワード | - |
データ型 | 数値(整数) |
単位 | - |
更新間隔(秒) | 30s |
更新間隔カスタマイズ | - |
ヒストリの保存期間(日) | 90d |
トレンドの保存期間(日) | 365d |
値のマッピングの使用 | なし |
アプリケーション | icmpping |
ホストインベントリフィールドの自動設定 | なし |
説明 | - |
有効 | チェック |
「設定」-「テンプレート」から、対象の「テンプレート」を選択し、「アイテム」をクリックします。
「アイテムの作成」をクリックします。
対象の設定項目を入力し、「追加」をクリックします。
トリガー作成(死活監視)
本検証では、以下の設定とします。
項目 | 設定値 |
---|---|
名前 | ICMP host unreachable on {HOSTNAME} |
深刻度 | 重度の障害 |
条件式 | {Kensyo_Template_ping_check:icmpping.last()}=0 |
正常イベントの生成 | 条件式 |
障害イベント生成モード | 単一 |
正常時のイベントクローズ | すべての障害 |
タグ | - |
手動でのクローズ許可 | チェック |
URL | - |
説明 | - |
有効 | チェック |
「トリガー」-「トリガーの作成」をクリックします。
対象の設定項目を入力し、「追加」をクリックします。
③ 定期的にグラフ出力させる設定
グラフ作成
/(ルート)領域使用率と/(ルート)残量のグラフを作成します。
本検証では、以下の設定とします。
項目 | 設定値 |
---|---|
名前 | Disk Usage and Free Space |
幅 | 900 |
高さ | 200 |
グラフのタイプ | ノーマル |
凡例を表示 | チェック |
ワーキングタイムの表示 | チェック |
トリガーを表示 | チェック |
パーセンタイルライン(左) | - |
パーセンタイルライン(右) | - |
Y軸の最小値 | 固定(0.0000) |
Y軸の最大値 | 計算 |
アイテム1 | Kensyo_Template_OS_resource: Used disk space on / in % [関数:平均][グラフの形式:線][Y軸:左][色:00CC00] |
アイテム2 | Kensyo_Template_OS_resource: Free disk space on / [関数:平均][グラフの形式:線][Y軸:右][色:3333FF] |
「グラフ」-「グラフを作成」をクリックします。
対象の設定項目を入力し、「追加」をクリックします。
グラフ送付スクリプト作成
Zabbixサーバーにログインし、グラフ送付スクリプトを作成します。
スクリプトの内容は後述の「グラフ送付スクリプト」を参照してください。
作成したスクリプトに実行権を付与します。
# chmod 755 /usr/lib/zabbix/alertscripts/slack-graph.sh
cron登録
スクリプトを定期実行させるためにcron登録します。
本検証では、毎週金曜日の17時にグラフを送付する設定とします。
# crontab -e 以下を追加 0 17 * * 5 /usr/lib/zabbix/alertscripts/slack-graph.sh
④ 監視対象サーバー障害時の通知設定
メディアタイプ
本検証では、以下の設定とします。
項目 | 設定値 |
---|---|
名前 | Slack |
タイプ | スクリプト |
スクリプト名 | slack.sh |
スクリプトパラメータ1 | {ALERT.SENDTO} |
スクリプトパラメータ2 | {ALERT.SUBJECT} |
スクリプトパラメータ3 | {ALERT.MESSAGE} |
有効 | チェック |
※スクリプト名で設定している「slack.sh」は起動時スクリプト実行時にGitHubからダウンロードしたスクリプトを設定します。
「管理」-「メディアタイプ」-「メディアタイプの作成」をクリックします。
※メール設定はデフォルトで作成されているものを選択して使用します。
対象の設定項目を入力し、「更新」をクリックします。
ユーザー
本検証では、以下の設定とします。
項目 | 設定値 | 設定値 |
---|---|---|
タイプ | Slack | |
送信先 | <任意のチャンネル名> | xxx@xxxxx.com |
有効な時間帯 | 1-7,00:00-24:00 | 1-7,00:00-24:00 |
指定した深刻度のときに使用 未分類 情報 警告 軽度の障害 重度の障害 指名的な障害 |
チェック | チェック |
有効 | チェック | チェック |
「管理」-「ユーザー」から対象のエイリアスを選択します。
今回の検証では「Admin」とします。
「メディア」-「追加」をクリックします。
対象の設定項目を入力し、「追加」をクリックします。
「更新」をクリックします。
アクション
本検証では、以下の設定とします。
■Slackの設定
項目 | 設定値 |
---|---|
アクション | |
名前 | Report problem to slack |
実行内容 | |
実行内容の詳細 ユーザーグループに送信 次のメディアのみ使用 |
Zabbix administrators Slack |
復旧時実行内容 | |
実行内容の詳細 ユーザーグループに送信 次のメディアのみ使用 |
Zabbix administrators Slack |
※上記以外の設定項目はデフォルト設定となります。
■メールの設定
項目 | 設定値 |
---|---|
アクション | |
名前 | Report problems to Zabbix administrators ※デフォルトで作成されているものを使用 |
実行内容 | |
実行内容の詳細 ユーザーグループに送信 次のメディアのみ使用 |
Zabbix administrators |
復旧時実行内容 | |
実行内容の詳細 ユーザーグループに送信 次のメディアのみ使用 |
Zabbix administrators |
※上記以外の設定項目はデフォルト設定となります。
「設定」-「アクション」-「アクションの作成」をクリックします。
「アクション」から名前を入力します。
「実行内容」を選択し、「新規」をクリックします。
対象の設定項目を選択し、「追加」をクリックします。
「復旧時実行内容」を選択し、「新規」をクリックします。
対象の設定項目を選択し、「追加」をクリックします。
「更新」をクリックします。
⑤ Zabbixサーバー障害時の設定
Zabbixサーバー自身の監視はニフクラ基本監視(PING監視)にて行います。
※詳細な作成方法は、以下を参照してください。
クラウドヘルプ(監視:ルールの作成)
テスト
① 定期的にグラフ出力させるテスト
テスト項目
毎週金曜日の17時にグラフが送付されることを確認する。
テスト結果
全て想定どおりの動作を行い、指定した時間に1週間分のグラフがメールとSlackに通知されることを確認できました。
メール
Slack
② 監視対象サーバーの障害テスト
今回の検証では、Zabbixで検知した障害は、メールとSlackに通知されます。
テスト項目
監視対象サーバーの障害時想定のテストを実施しました。
試験項目 | 試験内容 |
---|---|
死活監視の動作確認 | 監視対象サーバーを停止させる |
プロセス監視の動作確認 | crondプロセスを停止させる |
リソース監視の動作確認 | /bootの使用率を70%と90%以上にする |
メッセージ監視の動作確認 | 「/var/log/messages」にメッセージを送る |
テスト結果
全て想定どおりの動作を行い、テスト結果としても問題ないことが確認できました。
(メールとSlackに通知されることを確認)
※「死活監視の動作確認」以外もテスト済みですが、画像は割愛させて頂きます。
メール
Slack
③ Zabbixサーバーの障害テスト
今回の検証では、Zabbixサーバー自身の障害は、メール通知されます。
テスト項目
Zabbixサーバーの障害時想定のテストを2パターン実施しました。
[カスタマイズイメージを利用した復旧パターン]
No | 試験手順 |
---|---|
1 | 事前にカスタマイズイメージを作成 |
2 | サーバー停止(Zabbixサーバーの障害を想定) ※ニフクラ基本監視にて検知 |
3 | サーバー削除 |
4 | カスタマイズイメージを使用しリストア (付替IPの付与も実施) |
5 | ニフクラ基本監視の再設定 ※設定作業の「⑤Zabbixサーバー障害時の設定」を実施 |
6 | 動作確認 |
※カスタマイズイメージの作成方法は、以下を参照してください。
クラウドヘルプ(サーバー:イメージ保存)
[起動時スクリプトを利用した復旧パターン]
No | 試験手順 |
---|---|
1 | サーバー停止(Zabbixサーバーの障害を想定) ※ニフクラ基本監視にて検知 |
2 | サーバー削除 |
3 | サーバー再作成時に起動時スクリプト(ZabbixServer用)を使用し、 リストア(付替IPの付与も実施) |
4 | Zabbixの再セットアップ(DBにアクセスするための設定など) ※設定作業の「①Zabbixサーバーの初期設定」を実施 |
5 | グラフ出力用のスクリプト作成とcronの登録 ※設定作業の「③ 定期的にグラフ出力させる設定」を実施 (グラフ作成は除く) |
6 | ニフクラ基本監視の再設定 ※設定作業の「⑤Zabbixサーバー障害時の設定」を実施 |
7 | 動作確認 |
※No.3の起動時スクリプトを使用しリストアする場合、以下のコマンドはZabbixの初期データをインポートするコマンドのため、スクリプトから削除して実施してください。
### Import Initial Data zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -h ${DB_HOST} -P ${DB_PORT} -u ${DB_USER} -p${DB_PASSWD} ${DB_NAME}
テスト結果
全て想定どおりの動作を行い、監視が継続できることを確認できました。
Zabbixサーバーの障害時の復旧手順としては、Zabbixの再セットアップなどが必要ない「カスタマイズイメージを利用した復旧パターン」の方が簡単でした。
なお、ZabbixのDBを分離しているため、サーバーを再作成する「起動時スクリプトを利用した復旧パターン」でも
復旧させるまでにかかる時間は数分の差しかありませんでした。
カスタマイズイメージ利用分の費用を節約したい場合は、「起動時スクリプトを利用した復旧パターン」でも良いかもしれません。
これで、本検証は終了となります。
まとめ
Zabbixサーバの障害を想定し、今回2パターンのテスト(③ Zabbixサーバーの障害テスト)を実施しZabbixサーバーの復旧を確認することができました。
データベースをRDBにすることで、データベースのバックアップや冗長化、ディスクの増設がコントロールパネルで可能となるため、操作もしやすいかと思います。
ニフクラでZabbixを構築する際のご参考にしていただけると幸いです。
※注意事項
- 本記事については検証結果の1つとなります。実際に検討される場合は、事前にそれぞれの要件を鑑みて実装するか確認してください。
- 本記事ではOS上の操作についても記載していますが、ニフクラではOS以上はご利用者様の責任範囲となりますのでご留意ください。
各スクリプトのソースコード
起動時スクリプト(ZabbixServer用)
本スクリプトは、ニフクラの起動時スクリプトにて使用します。
OSの設定およびZabbixサーバーのインストールと設定を行います。
◇環境
Zabbix:3.4
OS:CentOS7.4
DB:RDB(MySQL 5.7)
PHP:PHP 5.4 (CentOS 7標準)
◇前提条件
・RDB、プライベートLAN、ファイアウォールグループを作成していること
・Slackに「Incoming Webhooks」というアプリが導入済みで、
「Webhook URL」をあらかじめ控えておくこと
・Slack APIのfiles.uploadが使えること
◇対象サーバー
Zabbixサーバー
◇スクリプト名
SettingZabbixServer.sh
(起動時スクリプトにて使用するため、サーバーへの配置はしない)
◇スクリプト内容
本検証では、以下の設定とします。
項目 | 設定値 |
---|---|
HOST_NAME | 20182QZabbixSV |
IPADDR | 192.168.2.10 |
NETMASK | 255.255.255.0 |
DNS_SERVER | <任意のDNSのIPアドレス> |
DB_HOST | 192.168.2.30 |
DB_PORT | 3306 |
DB_NAME | zabbix |
DB_USER | zabbix |
DB_PASSWD | **** |
SLACK_URL ※1 | https:\/\/hooks.slack.com\/services\/**** |
GRAPH_PERIOD ※2 | 374400 |
LOGFILE | /var/tmp/SettingZabbix_`date +%Y%m%d`.log |
※1:SLACK_URLは、/(スラッシュ)の前に(エンマーク)をいれること
例)https://hooks.slack.com/services/****
↓
https:\/\/hooks.slack.com\/services\/****
※2:GRAPH_PERIODは、グラフの表示期間(1秒単位)
例)月曜日の9:00から金曜日の17:00までの期間を表示する場合:374400
#!/bin/bash -x ### Config #========================================= HOST_NAME="<任意のホスト名>" IPADDR="<任意のIPアドレス>" NETMASK="<任意のネットマスク>" DNS_SERVER="<任意のDNSのIPアドレス>" DB_HOST="<DBのIPアドレス>" DB_PORT="<DBの接続ポート>" DB_NAME="<データベースの名前>" DB_USER="<DBのユーザー名>" DB_PASSWD="<DBのユーザーのパスワード>" SLACK_URL="<Webhook URL>" GRAPH_PERIOD="<グラフの表示期間>" LOGFILE="<スクリプト実行ログの出力先>" #========================================= ### LogOutput Configuration SECONDS=0 exec > ${LOGFILE} exec 2>&1 ### Hostname Configuration /bin/hostname ${HOST_NAME} /bin/sed -i".org" -e "s/localhost.localdomain/${HOST_NAME}/" /etc/hostname /bin/diff /etc/hostname /etc/hostname.org ### PrivateIP Configuration /bin/sed -i".org" -e "s/BOOTPROTO=dhcp/BOOTPROTO=static/" /etc/sysconfig/network-scripts/ifcfg-ens192 echo IPADDR=${IPADDR} >> /etc/sysconfig/network-scripts/ifcfg-ens192 echo NETMASK=${NETMASK} >> /etc/sysconfig/network-scripts/ifcfg-ens192 /bin/diff /etc/sysconfig/network-scripts/ifcfg-ens192 /etc/sysconfig/network-scripts/ifcfg-ens192.org systemctl restart network systemctl status network ### DNS Configuration /bin/sed -i".org" -e "$ a nameserver $DNS_SERVER" /etc/resolv.conf /bin/diff /etc/resolv.conf /etc/resolv.conf.org ### Syslog Configuration /bin/sed -i".org" -e '/#### RULES ####/a \ $template mytemplate, "%timegenerated% <%syslogfacility-text%.%syslogseverity-text%> %hostname% %programname%: %msg%\\n"' \ /etc/rsyslog.conf /bin/sed -i -e "s/\/var\/log\/messages/\/var\/log\/messages;mytemplate/g" /etc/rsyslog.conf /bin/diff /etc/rsyslog.conf /etc/rsyslog.conf.org systemctl restart rsyslog systemctl status rsyslog ### Add Install Repository and necessary packages for Zabbix yum -y install php-mysql php-gd php-xml php-bcmath yum -y install http://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/zabbix-release-3.4-2.el7.noarch.rpm ### Install Zabbix yum -y install zabbix-server-mysql zabbix-web-mysql zabbix-web-japanese zabbix-agent zabbix-get ### Install Mariadb Client yum -y install mariadb ### Import Initial Data zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -h ${DB_HOST} -P ${DB_PORT} -u ${DB_USER} -p${DB_PASSWD} ${DB_NAME} ### ZabbixServer Configuration /bin/sed -i".org" -e "s/# DBHost=localhost/DBHost=${DB_HOST}/g" /etc/zabbix/zabbix_server.conf /bin/sed -i -e "s/# DBUser=/DBUser=${DB_USER}/g" /etc/zabbix/zabbix_server.conf /bin/sed -i -e "s/# DBPassword=/DBPassword=${DB_PASSWD}/g" /etc/zabbix/zabbix_server.conf /bin/diff /etc/zabbix/zabbix_server.conf /etc/zabbix/zabbix_server.conf.org ### ZabbixAgent Configuration /bin/sed -i".org" -e "s/Hostname=Zabbix server/Hostname=${HOST_NAME}/g" /etc/zabbix/zabbix_agentd.conf /bin/sed -i -e "s/# AllowRoot=0/AllowRoot=1/g" /etc/zabbix/zabbix_agentd.conf /bin/diff /etc/zabbix/zabbix_agentd.conf /etc/zabbix/zabbix_agentd.conf.org ### Zabbix Web Interface Configuration /bin/sed -i".org" -e "s/# php_value date.timezone Europe\/Riga/php_value date.timezone Asia\/Tokyo/g" /etc/httpd/conf.d/zabbix.conf /bin/diff /etc/httpd/conf.d/zabbix.conf /etc/httpd/conf.d/zabbix.conf.org ### PHP Configuration /bin/sed -i".org" -e "s/;date.timezone =/date.timezone = Asia\/Tokyo/g" /etc/php.ini /bin/sed -i -e "s/;always_populate_raw_post_data/always_populate_raw_post_data/g" /etc/php.ini /bin/sed -i -e "s/post_max_size = 8M/post_max_size = 16M/g" /etc/php.ini /bin/sed -i -e "s/max_execution_time = 30/max_execution_time = 300/g" /etc/php.ini /bin/sed -i -e "s/max_input_time = 60/max_input_time = 300/g" /etc/php.ini /bin/diff /etc/php.ini /etc/php.ini.org ### Slack Setting wget https://raw.githubusercontent.com/ericoc/zabbix-slack-alertscript/master/slack.sh -P /usr/lib/zabbix/alertscripts /bin/chmod 755 /usr/lib/zabbix/alertscripts/slack.sh /bin/sed -i".org" -e "s/url='CHANGEME'/url=${SLACK_URL}/g" /usr/lib/zabbix/alertscripts/slack.sh /bin/diff /usr/lib/zabbix/alertscripts/slack.sh /usr/lib/zabbix/alertscripts/slack.sh.org ### Zabbix Graph Setting yum -y install mutt wget https://raw.githubusercontent.com/ma3ki/sendimgmail/master/sendimgmail.sh -P /usr/lib/zabbix/alertscripts wget https://raw.githubusercontent.com/ma3ki/sendimgmail/master/sendimgmail.conf -P /usr/lib/zabbix/alertscripts /bin/chmod 755 /usr/lib/zabbix/alertscripts/sendimgmail.sh /bin/mkdir /etc/zabbix/graph /bin/sed -i".org" -e "s/ZABBIX_USER=admin/ZABBIX_USER=Admin/g" /usr/lib/zabbix/alertscripts/sendimgmail.conf /bin/sed -i -e "s/GRAPH_PERIOD=3600/GRAPH_PERIOD=${GRAPH_PERIOD}/g" /usr/lib/zabbix/alertscripts/sendimgmail.conf /bin/sed -i -e "s/IMAGE_TEMP=\/var\/tmp\/imgtmp/IMAGE_TEMP=\/etc\/zabbix\/graph/g" /usr/lib/zabbix/alertscripts/sendimgmail.conf /bin/sed -i -e "s/MAIL_FROM=hogehoge@example.com/MAIL_FROM=zabbix@company.com/g" /usr/lib/zabbix/alertscripts/sendimgmail.conf /bin/sed -i -e "s/MAIL_NAME=zabbix_alert/MAIL_NAME=zabbix_graph/g" /usr/lib/zabbix/alertscripts/sendimgmail.conf /bin/diff /usr/lib/zabbix/alertscripts/sendimgmail.conf /usr/lib/zabbix/alertscripts/sendimgmail.conf.org ### Service Startup and Automatic Startup Setting systemctl start zabbix-server systemctl start zabbix-agent systemctl start httpd systemctl enable zabbix-server systemctl enable zabbix-agent systemctl enable httpd systemctl status zabbix-server systemctl status zabbix-agent systemctl status httpd echo "[INFO] Script time is ${SECONDS}sec."
起動時スクリプト(ZabbixAgent用)
本スクリプトは、ニフクラの起動時スクリプトにて使用します。
OSの設定およびZabbixエージェントのインストールと設定を行います。
◇環境
Zabbix:3.4
OS:CentOS7.4
◇前提条件
・プライベートLAN、ファイアウォールグループを作成していること
・Zabbixサーバーのインストールが完了していること
◇対象サーバー
監視対象サーバー
◇スクリプト名
SettingZabbixAgent.sh
(起動時スクリプトにて使用するため、サーバーへの配置はしない)
◇スクリプト内容
本検証では、以下の設定とします。
項目 | 設定値 |
---|---|
HOST_NAME | 20182QZabbixCL |
IPADDR | 192.168.2.20 |
NETMASK | 255.255.255.0 |
DNS_SERVER | <任意のDNSのIPアドレス> |
ZABBIX_SERVER | 192.168.2.10 |
LOGFILE | /var/tmp/SettingZabbix_`date +%Y%m%d`.log |
#!/bin/bash -x ### Config #========================================= HOST_NAME="<任意のホスト名>" IPADDR="<任意のIPアドレス>" NETMASK="<任意のネットマスク>" DNS_SERVER="<任意のDNSのIPアドレス>" ZABBIX_SERVER="<ZabbixサーバーのIPアドレス>" LOGFILE="<スクリプト実行ログの出力先>" #========================================= ### LogOutput Configuration SECONDS=0 exec > ${LOGFILE} exec 2>&1 ### Hostname Configuration /bin/hostname ${HOST_NAME} /bin/sed -i".org" -e "s/localhost.localdomain/${HOST_NAME}/" /etc/hostname /bin/diff /etc/hostname /etc/hostname.org ### PrivateIP Configuration /bin/sed -i".org" -e "s/BOOTPROTO=dhcp/BOOTPROTO=static/" /etc/sysconfig/network-scripts/ifcfg-ens192 echo IPADDR=${IPADDR} >> /etc/sysconfig/network-scripts/ifcfg-ens192 echo NETMASK=${NETMASK} >> /etc/sysconfig/network-scripts/ifcfg-ens192 /bin/diff /etc/sysconfig/network-scripts/ifcfg-ens192 /etc/sysconfig/network-scripts/ifcfg-ens192.org systemctl restart network systemctl status network ### DNS Configuration /bin/sed -i".org" -e "$ a nameserver $DNS_SERVER" /etc/resolv.conf /bin/diff /etc/resolv.conf /etc/resolv.conf.org ### Syslog Configuration /bin/sed -i".org" -e '/#### RULES ####/a \ $template mytemplate, "%timegenerated% <%syslogfacility-text%.%syslogseverity-text%> %hostname% %programname%: %msg%\\n"' \ /etc/rsyslog.conf /bin/sed -i -e "s/\/var\/log\/messages/\/var\/log\/messages;mytemplate/g" /etc/rsyslog.conf /bin/diff /etc/rsyslog.conf /etc/rsyslog.conf.org systemctl restart rsyslog systemctl status rsyslog ### Add Install Repository yum -y install http://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/zabbix-release-3.4-2.el7.noarch.rpm ### Install Zabbix yum -y install zabbix-agent ### ZabbixAgent Configuration /bin/sed -i".org" -e "s/Server=127.0.0.1/Server=${ZABBIX_SERVER}/g" /etc/zabbix/zabbix_agentd.conf /bin/sed -i -e "s/ServerActive=127.0.0.1/ServerActive=${ZABBIX_SERVER}/g" /etc/zabbix/zabbix_agentd.conf /bin/sed -i -e "s/Hostname=Zabbix server/Hostname=${HOST_NAME}/g" /etc/zabbix/zabbix_agentd.conf /bin/sed -i -e "s/# AllowRoot=0/AllowRoot=1/g" /etc/zabbix/zabbix_agentd.conf /bin/diff /etc/zabbix/zabbix_agentd.conf /etc/zabbix/zabbix_agentd.conf.org ### Service Startup and Automatic Startup Setting systemctl start zabbix-agent systemctl enable zabbix-agent systemctl status zabbix-agent echo "[INFO] Script time is ${SECONDS}sec."
グラフ送付スクリプト
◇前提条件
・プライベートLAN、ファイアウォールグループを作成していること
・Zabbixサーバーのインストールが完了していること
・SlackのチャンネルIDとSlackで取得したトークンをあらかじめ控えておくこと
◇対象サーバー
Zabbixサーバー
◇スクリプト名
slack-graph.sh
(/usr/lib/zabbix/alertscripts/配下に配置する)
◇スクリプト内容
本検証では、以下の設定とします。
項目 | 設定値 |
---|---|
xxx@xxxxx.com | |
SUBJECT | [Zabbix] DiskUsage And FreeSpace |
HOST_NAME | ZabbixCL |
KEY | vfs.fs.size[/,pused] |
FILE_NAME | /etc/zabbix/graph/792.png |
FILE_NAME2 | /etc/zabbix/graph/[Zabbix]ThisWeek_DiskUsage_And_FreeSpace.png |
CHANNELS | ********* |
TOKEN | ************************ |
#!/bin/bash -x ### Config #========================================= MAIL="<送付先のメールアドレス>" SUBJECT="<メールの件名>" HOST_NAME="<対象サーバー名>" KEY="<Zabbixアイテムのキー>" FILE_NAME="<グラフの保存先とファイル名(グラフID)>" FILE_NAME2="<グラフの保存先と任意のファイル名>" CHANNELS="<SlackのチャンネルID>" TOKEN="<Slackで取得したトークン>" #========================================= ### zabbix_graph mail /usr/lib/zabbix/alertscripts/sendimgmail.sh ${MAIL} "${SUBJECT}" \ $(echo -e ThisWeek_DiskUsage_And_FreeSpace\n\nhost: ${HOST_NAME}\nkey: ${KEY}")" ### zabbix_graph slack if [ -f ${FILE_NAME} ]; then mv ${FILE_NAME} ${FILE_NAME2} curl -F file=@${FILE_NAME2} -F channels=${CHANNELS} -F token=${TOKEN} "https://slack.com/api/files.upload" fi
【参考】起動時スクリプト(RDBを利用しないZabbixServerのパターン)
本スクリプトは、ニフクラの起動時スクリプトにて使用します。
OSの設定およびZabbixサーバーとMariaDBのインストールと設定を行います。
※RDBとSlackを利用しないシンプル構成のスクリプトになります。
※本検証では、ここで記載しているスクリプトは使用していません。
◇環境
Zabbix:3.4
OS:CentOS7.4
DB:MariaDB 5.5 (CentOS 7標準)
PHP:PHP 5.4 (CentOS 7標準)
◇前提条件
・プライベートLAN、ファイアウォールグループを作成していること
◇スクリプト名
SettingZabbix.sh
(起動時スクリプトにて使用するため、サーバーへの配置はしない)
◇スクリプト内容
#!/bin/bash -x ### Config #========================================= HOST_NAME="<任意のホスト名>" IPADDR="<任意のIPアドレス>" NETMASK="<任意のネットマスク>" DNS_SERVER="<任意のDNSのIPアドレス>" DB_NAME="<データベースの名前>" DB_USER="<DBのユーザー名>" DB_PASSWD="<DBのユーザーのパスワード>" LOGFILE="<スクリプト実行ログの出力先>" #========================================= ### LogOutput Configuration SECONDS=0 exec > ${LOGFILE} exec 2>&1 ### Hostname Configuration /bin/hostname ${HOST_NAME} /bin/sed -i".org" -e "s/localhost.localdomain/${HOST_NAME}/" /etc/hostname /bin/diff /etc/hostname /etc/hostname.org ### PrivateIP Configuration /bin/sed -i".org" -e "s/BOOTPROTO=dhcp/BOOTPROTO=static/" /etc/sysconfig/network-scripts/ifcfg-ens192 echo IPADDR=${IPADDR} >> /etc/sysconfig/network-scripts/ifcfg-ens192 echo NETMASK=${NETMASK} >> /etc/sysconfig/network-scripts/ifcfg-ens192 /bin/diff /etc/sysconfig/network-scripts/ifcfg-ens192 /etc/sysconfig/network-scripts/ifcfg-ens192.org systemctl restart network systemctl status network ### DNS Configuration /bin/sed -i".org" -e "$ a nameserver $DNS_SERVER" /etc/resolv.conf /bin/diff /etc/resolv.conf /etc/resolv.conf.org ### Add Install Repository and necessary packages for Zabbix yum -y install php-mysql php-gd php-xml php-bcmath yum -y install http://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/zabbix-release-3.4-2.el7.noarch.rpm ### Install Zabbix yum -y install zabbix-server-mysql zabbix-web-mysql zabbix-web-japanese zabbix-agent zabbix-get ### Install MariaDB yum -y install mariadb-server ### MariaDB Configuration /bin/sed -i".org" -e '/\[mysqld\]/a innodb_file_per_table' /etc/my.cnf.d/server.cnf /bin/sed -i -e '/\[mysqld\]/a skip-character-set-client-handshake' /etc/my.cnf.d/server.cnf /bin/sed -i -e '/\[mysqld\]/a collation-server = utf8_bin' /etc/my.cnf.d/server.cnf /bin/sed -i -e '/\[mysqld\]/a character-set-server = utf8' /etc/my.cnf.d/server.cnf /bin/diff /etc/my.cnf.d/server.cnf /etc/my.cnf.d/server.cnf.org systemctl start mariadb systemctl enable mariadb systemctl status mariadb ### Create Datadase and Authorization mysql -uroot -e "create database ${DB_NAME};" mysql -uroot -e "grant all privileges on ${DB_NAME}.* to ${DB_USER}@localhost identified by '${DB_PASSWD}' ;" ### Import Initial Data zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uroot ${DB_NAME} ### ZabbixServer Configuration /bin/sed -i".org" -e "s/# DBHost=localhost/DBHost=127.0.0.1/g" /etc/zabbix/zabbix_server.conf /bin/sed -i -e "s/# DBUser=/DBUser=${DB_USER}/g" /etc/zabbix/zabbix_server.conf /bin/sed -i -e "s/# DBPassword=/DBPassword=${DB_PASSWD}/g" /etc/zabbix/zabbix_server.conf /bin/diff /etc/zabbix/zabbix_server.conf /etc/zabbix/zabbix_server.conf.org ### Zabbix Web Interface Configuration /bin/sed -i".org" -e "s/# php_value date.timezone Europe\/Riga/php_value date.timezone Asia\/Tokyo/g" /etc/httpd/conf.d/zabbix.conf /bin/diff /etc/httpd/conf.d/zabbix.conf /etc/httpd/conf.d/zabbix.conf.org ### PHP Configuration /bin/sed -i".org" -e "s/;date.timezone =/date.timezone = Asia\/Tokyo/g" /etc/php.ini /bin/sed -i -e "s/;always_populate_raw_post_data/always_populate_raw_post_data/g" /etc/php.ini /bin/sed -i -e "s/post_max_size = 8M/post_max_size = 16M/g" /etc/php.ini /bin/sed -i -e "s/max_execution_time = 30/max_execution_time = 300/g" /etc/php.ini /bin/sed -i -e "s/max_input_time = 60/max_input_time = 300/g" /etc/php.ini /bin/diff /etc/php.ini /etc/php.ini.org ### Service Startup and Automatic Startup Setting systemctl start zabbix-server systemctl start zabbix-agent systemctl start httpd systemctl enable zabbix-server systemctl enable zabbix-agent systemctl enable httpd systemctl status zabbix-server systemctl status zabbix-agent systemctl status httpd echo "[INFO] Script time is ${SECONDS}sec."