CLOUD NAVIクラウドとは?からクラウドを支える技術や関連用語まで解説

FJcloud実践

RDBを利用したZabbix監視構成の検証

2019年03月29日

この記事は、ニフクラブログで2019-03-29に公開された記事を移転したものです。

こんにちは、ニフクラテクニカルアカウントチームです。

ニフクラでは、様々な監視機能・監視サービスを提供していますが、Zabbix等オープンソースのツールを利用して監視することもできます。 今回はニフクラRDBをZabbixのDBとして利用する監視構成を検証してみました。

ニフクラRDBを利用するメリットですが、Zabbixサーバーが故障しても、サーバーをリストアしRDBにマウントするだけで復旧が可能になる点です。また、共通グローバル側のネットワークを切り離すことでセキュリティの強化を図ることもできます。他にもニフクラのコントロールパネル(管理画面)からデータベースのバックアップが可能になる、スケールアップやディスク容量の拡張が容易に行えるなどのメリットがあります。

それでは、構成と設定の手順についてご説明いたします。

Zabbixの設定値まで記載しているため長文になりますが、参考にしていただけましたら幸いです。

前提条件

本ブログは、以下の前提知識がある方を想定しています。

  • ニフクラの基本的なコントロールパネルの操作、サービスを利用する知識

(サーバー作成、ネットワーク構築など) * Zabbixの構築と設定に関する知識 * Slackを利用する知識

検証概要

本ブログは、以下の検証を実施しています。

  1. Zabbixサーバーの管理DBを分離し、管理DB部分をニフクラのRDBで構築

Zabbixの導入および設定は起動時スクリプトにて実施。(OS設定も含む) 2. 以下のZabbix監視設定を実施

・死活監視

・プロセス監視

・リソース監視

・メッセージ監視 3. ニフクラ基本監視設定

・PING監視(Zabbixサーバー)

※Zabbixサーバー自身が停止するような障害はZabbixで検知できないため、ニフクラの基本監視設定を実施。

※ニフクラの基本監視を使用せず、Zabbixのみを使用する場合は、Zabbix自体を冗長化し相互監視する方法もありますので以下の記事を参考にしてください。

ニフクラブログ:ゾーン間冗長構成システムの監視実装検証 4. グラフ出力

・定期的に監視結果をグラフ化し、Slackおよびメール通知 5. 障害発生時の通知

・監視対象サーバーの障害発生時にSlackおよびメール通知 6. 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の作成

  1. 事前に「プライベートLAN作成」、「RDBファイアウォールグループ作成」を実施します。

※詳細な作成方法は、以下を参照してください。

クラウドヘルプ(プライベートLAN:作成)

クラウドヘルプ(RDB:DBファイアウォールの作成) 2. コントロールパネルから「RDB」-「DBサーバー」-「DBサーバー作成」をクリックします。

3. DBエンジンを選択します。

本検証では、DBエンジンを「MySQL 5.7.15」とします。

4. 基本設定を入力し、「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サーバーの初期設定

    1. 作業端末のWebブラウザから以下のURLにアクセスします。

    http://<ZabbixサーバーのグローバルIPアドレス>/zabbix 2. 「Next step」を選択します。

    3. すべてのチェック項目が「OK」であることを確認し、「Next step」をクリックします。

    4. 対象の設定項目を入力し、「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
    1. 「設定」-「ホストグループ」-「ホストグループの作成」をクリックします。

    2. 対象の設定項目を入力し、「追加」をクリックします。

    ホスト作成

    本検証では、以下の設定とします。

    ホスト名 所属グループ IPアドレス 接続方法 ポート
    ZabbixSV KensyoGroup 127.0.0.1 IPアドレス 10050
    ZabbixCL KensyoGroup 192.168.2.20 IPアドレス 10050

    ※上記以外の設定項目はデフォルト設定となります。

    1. 「設定」-「ホスト」-「ホストの作成」を選択します。

    2. 対象の設定項目を入力し、「追加」をクリックします。

    3. 監視対象サーバー(ホスト)の数だけ、繰り返し実施します。

    テンプレート作成

    本検証では、以下の設定とします。

    テンプレート名 所属グループ ホスト / テンプレート
    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
    1. 「設定」-「テンプレート」-「テンプレートの作成」をクリックします。
    2. 対象の設定項目を入力し、「追加」をクリックします。
    3. テンプレートの数だけ、繰り返し実施します。

    アイテム作成(死活監視)

    ここでは、「テンプレート作成」で作成した以下のテンプレートを使用します。

    テンプレート名
    Kensyo_Template_ping_check

    本検証では、以下の設定とします。

    項目 設定値
    名前 Ping Check
    タイプ シンプルチェック
    キー icmpping
    ユーザー名
    パスワード
    データ型 数値(整数)
    単位
    更新間隔(秒) 30s
    更新間隔カスタマイズ
    ヒストリの保存期間(日) 90d
    トレンドの保存期間(日) 365d
    値のマッピングの使用 なし
    アプリケーション icmpping
    ホストインベントリフィールドの自動設定 なし
    説明
    有効 チェック
    1. 「設定」-「テンプレート」から、対象の「テンプレート」を選択し、「アイテム」をクリックします。

    2. 「アイテムの作成」をクリックします。

    3. 対象の設定項目を入力し、「追加」をクリックします。

    トリガー作成(死活監視)

    本検証では、以下の設定とします。

    項目 設定値
    名前 ICMP host unreachable on {HOSTNAME}
    深刻度 重度の障害
    条件式 {Kensyo_Template_ping_check:icmpping.last()}\=0
    正常イベントの生成 条件式
    障害イベント生成モード 単一
    正常時のイベントクローズ すべての障害
    タグ
    手動でのクローズ許可 チェック
    URL
    説明
    有効 チェック
    1. 「トリガー」-「トリガーの作成」をクリックします。

    2. 対象の設定項目を入力し、「追加」をクリックします。

    ③ 定期的にグラフ出力させる設定

    グラフ作成

    /(ルート)領域使用率と/(ルート)残量のグラフを作成します。

    本検証では、以下の設定とします。

    項目 設定値
    名前 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]
    1. 「グラフ」-「グラフを作成」をクリックします。

    2. 対象の設定項目を入力し、「追加」をクリックします。

    グラフ送付スクリプト作成

    • Zabbixサーバーにログインし、グラフ送付スクリプトを作成します。

    スクリプトの内容は後述の「グラフ送付スクリプト」を参照してください。 2. 作成したスクリプトに実行権を付与します。

    # 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からダウンロードしたスクリプトを設定します。

    1. 「管理」-「メディアタイプ」-「メディアタイプの作成」をクリックします。

    ※メール設定はデフォルトで作成されているものを選択して使用します。

    2. 対象の設定項目を入力し、「更新」をクリックします。

    ユーザー

    本検証では、以下の設定とします。

    項目 設定値 設定値
    タイプ Slack Email
    送信先 <任意のチャンネル名> xxx@xxxxx.com
    有効な時間帯 1-7,00:00-24:00 1-7,00:00-24:00
    指定した深刻度のときに使用 未分類 情報 警告 軽度の障害 重度の障害 指名的な障害 チェック チェック
    有効 チェック チェック
    1. 「管理」-「ユーザー」から対象のエイリアスを選択します。

    今回の検証では「Admin」とします。

    2. 「メディア」-「追加」をクリックします。

    3. 対象の設定項目を入力し、「追加」をクリックします。

    4. 「更新」をクリックします。

    アクション

    本検証では、以下の設定とします。

    ■Slackの設定

    項目 設定値
    アクション
    名前 Report problem to slack
    実行内容
    実行内容の詳細 ユーザーグループに送信 次のメディアのみ使用 Zabbix administratorsSlack
    復旧時実行内容
    実行内容の詳細 ユーザーグループに送信 次のメディアのみ使用 Zabbix administratorsSlack

    ※上記以外の設定項目はデフォルト設定となります。

    ■メールの設定

    項目 設定値
    アクション
    名前 Report problems to Zabbix administrators※デフォルトで作成されているものを使用
    実行内容
    実行内容の詳細 ユーザーグループに送信 次のメディアのみ使用 Zabbix administratorsEmail
    復旧時実行内容
    実行内容の詳細 ユーザーグループに送信 次のメディアのみ使用 Zabbix administratorsEmail

    ※上記以外の設定項目はデフォルト設定となります。

    1. 「設定」-「アクション」-「アクションの作成」をクリックします。

    2. 「アクション」から名前を入力します。

    3. 「実行内容」を選択し、「新規」をクリックします。

    4. 対象の設定項目を選択し、「追加」をクリックします。

    5. 「復旧時実行内容」を選択し、「新規」をクリックします。

    6. 対象の設定項目を選択し、「追加」をクリックします。

    7. 「更新」をクリックします。

    ⑤ Zabbixサーバー障害時の設定

    Zabbixサーバー自身の監視はニフクラ基本監視(PING監視)にて行います。

    ※詳細な作成方法は、以下を参照してください。

    クラウドヘルプ(監視:ルールの作成)

    テスト

    ① 定期的にグラフ出力させるテスト

    テスト項目

    毎週金曜日の17時にグラフが送付されることを確認する。

    テスト結果

    全て想定どおりの動作を行い、指定した時間に1週間分のグラフがメールとSlackに通知されることを確認できました。

    メール

    Slack

    ② 監視対象サーバーの障害テスト

    今回の検証では、Zabbixで検知した障害は、メールとSlackに通知されます。

    テスト項目

    監視対象サーバーの障害時想定のテストを実施しました。

    試験項目 試験内容
    死活監視の動作確認 監視対象サーバーを停止させる
    プロセス監視の動作確認 crondプロセスを停止させる
    リソース監視の動作確認 /bootの使用率を70%と90%以上にする
    メッセージ監視の動作確認 「/var/log/messages」にメッセージを送る

    テスト結果

    全て想定どおりの動作を行い、テスト結果としても問題ないことが確認できました。 (メールとSlackに通知されることを確認)

    ※「死活監視の動作確認」以外もテスト済みですが、画像は割愛させて頂きます。

    メール

    Slack

    ③ Zabbixサーバーの障害テスト

    今回の検証では、Zabbixサーバー自身の障害は、メール通知されます。

    テスト項目

    Zabbixサーバーの障害時想定のテストを2パターン実施しました。

    [カスタマイズイメージを利用した復旧パターン]

    No 試験手順
    事前にカスタマイズイメージを作成
    サーバー停止(Zabbixサーバーの障害を想定)※ニフクラ基本監視にて検知
    サーバー削除
    カスタマイズイメージを使用しリストア(付替IPの付与も実施)
    ニフクラ基本監視の再設定※設定作業の「⑤Zabbixサーバー障害時の設定」を実施
    動作確認

    ※カスタマイズイメージの作成方法は、以下を参照してください。

    クラウドヘルプ(サーバー:イメージ保存)

    [起動時スクリプトを利用した復旧パターン]

    No 試験手順
    サーバー停止(Zabbixサーバーの障害を想定)※ニフクラ基本監視にて検知
    サーバー削除
    サーバー再作成時に起動時スクリプト(ZabbixServer用)を使用し、リストア(付替IPの付与も実施)
    Zabbixの再セットアップ(DBにアクセスするための設定など)※設定作業の「①Zabbixサーバーの初期設定」を実施
    グラフ出力用のスクリプト作成とcronの登録※設定作業の「③ 定期的にグラフ出力させる設定」を実施(グラフ作成は除く)
    ニフクラ基本監視の再設定※設定作業の「⑤Zabbixサーバー障害時の設定」を実施
    動作確認

    ※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/配下に配置する)

    ◇スクリプト内容 本検証では、以下の設定とします。

    項目 設定値
    MAIL 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."
    
PageTop