はじめに
弊社では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
-

タグ: CART RECOVERY, カゴ落ち対策, カートリカバリー, クラウドサービス, コラム, ニュース
ゴルフネットワークプラス株式会社様 カゴ落ち改善を自動化「CART RECOVERY®(カートリカバリー)」ご利用事例 -

タグ: 1stPartyデータ, AI学習設計, GA4, GMP, Google広告, LTV最大化, ウェビナー開催, コラム, データ活用, 広告運用改善
広告成果の「頭打ち」を打破する!GA/GMPを活用したAI学習設計と運用戦略 -

タグ: AI Agents, AI分析, Amplitude Tokyo Meetup, PDCA改善, イベントレポート, グロース戦略, コラム, データドリブン, データ活用, プロダクト分析
【イベントレポート】プロダクトの意志をデータとAIで実装する 〜現場が自走するプロダクトアナリティクスの新時代〜 -

タグ: BigQuery連携, GA4, Looker Studio, コラム, ダッシュボード設計, データ分析効率化, データ活用, マーケティング分析, レポート自動化, 分析工数削減
2025年度 お客様満足度調査 結果のご報告 – Google アナリティクス 360等データ活用支援サービス -

タグ: AEO, AI Visibility, AI検索, Amplitude, コラム, データ分析, ブランド可視化, プロダクト分析, マーケティング分析
SEOの次はAEO?AI検索時代の新戦略②「AIビジビリティ」でブランドの視認性を解き明かす -

タグ: GA4, GA4導入, GTM, Udemy講座, googleタグマネージャー, アクセス解析, オンライン学習, コラム, データ活用, 計測設定
今なら1,500円!GA4×GTM徹底解説 GA4導入講座をUdemyで公開!

