はじめに
弊社ではGoogle Driveを使っていて、以前だとExcelを使っていたような場面も、かなりの部分がGoogleスプレッドシートに置き換わってきているところです。特に社内の資料に関しては、簡単に同僚に共有したり共同編集したりできたりするのが便利で、もう手放せなくなっています。
システムの情報もGoogleスプレッドシートにまとめていきたいところです。
今回、自社管理サーバの監視に使っているNagiosの通知をGoogleスプレッドシートに記録するようにしました。こうすることにより、今までメールだとトラブルの傾向など全貌把握がむつかしかったのが簡単になりました。記録が蓄積されるのもうれしいです。
背景
Nagiosとは複数のホスト、サービス、リソース等の状態の監視するシステムです。 Nagiosサーバから複数のリソースを監視できます。監視対象側にもエージェント(nrpe)をインストールするとより詳しい監視が行えます。
障害を検知した場合の通知は基本はメールですが、プラグインを追加してHipChatなどにも通知することができます。 メールやチャットで過去の履歴をまとめるのは結構つらいので、より便利にみる仕組みがほしくなってきます。
GoogleスプレッドシートはAPIが用意されていてOAuth2という比較的安全なやり方で操作することができます。 これらを用いて自動でNagios通知をスプレッドシートに書き込むやり方を紹介します。 Googleスプレッドシートに書き込むところはrubyのライブラリを使いました。
完成イメージ
手順
大きく次の3つのステップになります。
- GoogleDriveの準備
- サーバにruby環境構築
- Nagiosの設定ファイルに追加
1. GoogleDriveの準備
Google API OAuth2.0という仕組みの準備が必要です。
- 使うGoogleアカウントでログイン
- Google Developers Consoleにアクセス
- プロジェクトを作成
- リンクDrive APIをクリックし、「有効にする」をクリックする
- 左メニューの「認証情報」から認証情報を作成
- クライアント ID の作成 (OauthクライアントIDを選択)
- 同意画面を設定※できるだけ情報を入れておきます。
- アプリケーションの種類はその他を選択、名前を入力して作成をクリック
- 表示される「クライアント ID」, 「クライアント シークレット」をメモっておく
- Googleスプレッドシートを作成し、URLを確認
https://docs.google.com/spreadsheets/d/[IDっぽいこの部分をメモっておく]/edit#gid=0
2. サーバにruby環境構築
google-drive-rubyというgemライブラリを使います。
※今回はrbenvのインストールはユーザーローカルではなく、サーバ全体(グローバル)にインストールします。
Nagiosサーバでrbenv, rubyを使えるようにする。
$ sudo yum install -y git gcc gcc-c++ openssl-devel readline-devel zlib-devel bzip2 $ sudo visudo -f /etc/sudoers.d/00_base ※以下の内容を書き込む Defaults !secure_path Defaults env_keep += "PATH RBENV_ROOT" ※rbenvのインストールのため環境変数を設定 $ export RBENV_ROOT=/usr/local/rbenv $ export PATH=${RBENV_ROOT}/bin:${PATH} ※rbenvのインストール $ sudo git clone git://github.com/sstephenson/rbenv.git ${RBENV_ROOT} $ sudo git clone git://github.com/sstephenson/ruby-build.git ${RBENV_ROOT}/plugins/ruby-build $ sudo rbenv init - $ sudo vi /etc/profile に下記の設定を追記します。 export RBENV_ROOT=/usr/local/rbenv export PATH="$RBENV_ROOT/bin:$PATH" eval "$(rbenv init -)" ※ログインしなおし $ rbenv install -l ※rubyのバージョンの中から新しい目のものを選択する $ sudo rbenv install 2.3.1 $ sudo rbenv rehash $ sudo rbenv global 2.3.1 ※ 使いたいライブラリのインストール $ sudo gem install google_drive --no-ri --no-rdoc |
※CentOS6, CentOS7、ほぼ同じ手順。yum updateしてライブラリを新しくしておいたほうがいいです。
連携の設定
通知のコマンドを作成
- sudo vi /usr/lib64/nagios/plugins/notify-by-spreadsheet.rb
#!/usr/local/rbenv/shims/ruby # -*- coding: utf-8 -*- require 'google_drive' session = GoogleDrive.saved_session('/var/spool/nagios/config.json') spreadsheet_id = '[スプレッドシートを作ったときにメモったid]' host, ipa, state, type, desc, info, timestamp = ARGV time = Time.at(timestamp.to_i) ws = session.spreadsheet_by_key(spreadsheet_id).worksheets[0] num_rows = ws.num_rows if num_rows == 0 ws[1, 1] = 'TIME' ws[1, 2] = 'HOST' ws[1, 3] = 'IP ADDRESS' ws[1, 4] = 'STATE' ws[1, 5] = 'TYPE' ws[1, 6] = 'DESC' ws[1, 7] = 'INFO' num_rows += 1 end ws[num_rows + 1, 1] = time.strftime('%Y/%m/%d %H:%M:%S') ws[num_rows + 1, 2] = host ws[num_rows + 1, 3] = ipa ws[num_rows + 1, 4] = state ws[num_rows + 1, 5] = type ws[num_rows + 1, 6] = desc ws[num_rows + 1, 7] = info ws.save ws.reload |
- 権限やjsonなどの準備
$ sudo chmod 755 /usr/lib64/nagios/plugins/notify-by-spreadsheet.rb |
- コンソールで連携のテストを行います。
$ cd /var/spool/nagios/ $ sudo -u nagios vi config.json 以下を記入 {"client_id": "先にメモったクライアントID" ,"client_secret": "メモったクライアントシークレット"} $ sudo -u nagios sh -c '/usr/lib64/nagios/plugins/notify-by-spreadsheet.rb TEST 111.111.111.111 SERV TYPE DESC OUT `date +%s` ' 1. Open this page: ※長いhttps://accounts.google.com/o/oauth2/auth?~のアドレスが表示されるのでコピーしてブラウザにペーストします。 ※許可を確認後、コードが取得できるのでコピーし次に入力します。 2. Enter the authorization code shown in the page: |
※これで、Googleスプレッドシートに何か書き込まれるはずです。 もう一度実行すると今度は認証なしで実行できるようになります。
3. Nagiosの設定
Nagiosの設定ファイルは作りこんでいる場合もあるので、書く場所はそれぞれです。 以下ではインストールしたばかりの、Nagiosに簡単に組み込んでみた例です。
おまけ(CentOS7にNagiosインストール)
sudo yum -y install gd-devel epel-release sudo yum --enablerepo=epel -y install nagios nagios-plugins-{ping,disk,users,procs,load,swap,ssh,http} sudo htpasswd /etc/nagios/passwd nagiosadmin sudo systemctl start nagios sudo systemctl start httpd sudo systemctl enable nagios.service sudo systemctl enable httpd.service ※firewalldを調節 |
http://[IP ADDRESS]/nagios で管理画面にアクセス可能
設定ファイルの調整
/etc/nagios/objects/commands.cfg の末尾に以下の行追加
define command{ command_name notify-host-by-spreadsheet command_line $USER1$/notify-by-spreadsheet.rb "$HOSTALIAS$" "$HOSTADDRESS$" "HOST DOWN" "$NOTIFICATIONTYPE$" "-" "-" "$TIMET$" } define command{ command_name notify-service-by-spreadsheet command_line $USER1$/notify-by-spreadsheet.rb "$HOSTALIAS$" "$HOSTADDRESS$" "$SERVICESTATE$" "$NOTIFICATIONTYPE$" "$SERVICEDESC$" "$SERVICEOUTPUT$" "$TIMET$" } |
/etc/nagios/objects/contacts.cfg 追加
define contact{ contact_name spreadsheet use generic-contact host_notification_commands notify-host-by-spreadsheet service_notification_commands notify-service-by-spreadsheet } ※下のほうにある members nagiosadmin の行に members nagiosadmin,spreadsheet としてspreadsheetを追加 |
- 設定の読み込み
$ sudo nagios -v /etc/nagios/nagios.cfg で設定ファイルが有効か確認。有効であれば再読み込み $ sudo service nagios restart |
これで、通知が飛んだら作ったGoogleスプレッドシートに書き込まれるはずです。
注意点
間違えて連携の設定してしまうとセキュリティホールになりかねないので注意が必要です。
例えばOauth2の認証でjsonの記述を間違えたりすると”google-drive-ruby”という、 プラグインのクライアントIDを許可を求めてくるのでアカウントに接続されているアプリで確認して、消してやり直してください。
また、この仕組みを使わなくなった場合も許可を削除しておいた方がよいです
PICK UP
-
タグ: Webサイト多言語変換サービス, shutto翻訳, コラム, 事例紹介
株式会社明石工業様:shutto翻訳ご利用事例 -
タグ: Webサイト多言語変換サービス, shutto翻訳, コラム, 事例紹介
株式会社崎陽軒様:shutto翻訳ご利用事例 -
タグ: さぶみっと!メール配信, クラウドサービス, コラム, ニュース, 自社サービス
ITreview Grid Award 2025 Springにて「High Performer」を受賞しました!(メールマーケティングツールカテゴリー) -
タグ: eコマース, itreviewアワード, カゴ落ち対策, クラウドサービス, コラム, ニュース, 顧客満足度
ITreview Grid Award 2025 Springにてカゴ落ち対策カテゴリー部門で「High Performer」を受賞しました! -
タグ: Webサイト多言語変換サービス, shutto翻訳, インバウンド, コラム, ニュース, 顧客満足度
ITreview Grid Award 2025 Springにて、ウェブサイト翻訳ツール部門で「Leader」を5年連続で受賞しました! -
タグ: 2025年の崖, DX推進, GA4, Googleアナリティクス, IT人材育成, gmpプレミアムサロン, イー・エージェンシー, オンライン学習, コラム, データ活用, マーケティングDX, レガシーシステム, 企業変革, 社内教育, 自社DX戦略
「2025年の崖」を乗り越える!DX推進とIT人材の育成が鍵