Sensu
監視
uchiwa

SensuとUchiwaの導入

More than 1 year has passed since last update.

CentOS7系の環境に、SensuとUchiwaをインストールします。

前提条件として、「Sensu(サーバーとクライアント)とUchiwaは1台のマシンにインストール」となります。


Redis

# epelレポジトリのインストール

yum install -y epel-release
yum update -y epel-release

# Redisのインストールとサービス起動、サービス自動起動設定
yum install -y redis
systemctl start redis
systemctl enable redis


RabbitMQ

# RabbitMQのインストールとサービス起動、サービス自動起動設定

yum install -y rabbitmq-server
systemctl start rabbitmq-server
systemctl enable rabbitmq-server

# RabbitMQのSensu向け設定
# Virtual Host(「/sensu」)の追加
rabbitmqctl add_vhost /sensu
# RabbitMQにsensuユーザーの追加(パスワードはsensu)
rabbitmqctl add_user sensu sensu
# sensuユーザーへの「/sensu」へのパーミッション付与
rabbitmqctl set_permissions -p /sensu sensu ".*" ".*" ".*"


Sensu&Uchiwa


Yumリポジトリの追加

cat << "_EOF_" > /etc/yum.repos.d/sensu.repo

[sensu]
name=sensu
baseurl=http://sensu.global.ssl.fastly.net/yum/$basearch/
gpgcheck=0
enabled=1
_EOF_


SensuとUchiwaインストールと初期設定

# SensuとUchiwaのインストール

yum install -y sensu uchiwa

# Sensuの設定ファイルの設置
cp /etc/sensu/config.json.example /etc/sensu/config.json

# Uchiwaの設定ファイルの設置
sed -i.original 's/Site 1/Sensu Server/;s/api1.example.com/127.0.0.1/' /etc/sensu/uchiwa.json
sed -i '8,17d' /etc/sensu/uchiwa.json


Sensuプラグインのインストール

# SNMPの設定(死活監視で使用)

yum install -y net-snmp net-snmp-utils
systemctl start snmpd
systemctl enable snmpd

# Sensuプラグインのインストール時に必要なライブラリ(gcc, gcc-c++)のインストール
yum install -y gcc gcc-c++

# Sensuプラグインのインストール(今回はディスクチェックとCPUチェック、HTTPのチェック、SNMPのチェックのみ)
/usr/bin/sensu-install -P disk-checks,cpu-checks,http, snmp


Sensuプラグインの設定

以下のファイル群を設置


/etc/sensu/conf.d/check-cpu.json

{

"checks": {
"cpu": {
"command": "check-cpu.rb -w 80 -c 95",
"interval": 10,
"subscribers": [
"test"
]
}
}
}

※10分ごとにCPU使用率をチェックし、CPU使用率が80%以上で警告、95%以上で致命的状態を通知


/etc/sensu/conf.d/check-disk.json

{

"checks": {
"disk": {
"command": "check-disk-usage.rb -w 75 -c 90",
"interval": 600,
"subscribers": [
"test"
]
}
}
}

※10分ごとにディスク使用率をチェックし、ディスク使用率が80%以上で警告、95%以上で致命的状態を通知


/etc/sensu/conf.d/check-http.json

{

"checks": {
"http": {
"command": "check-http.rb -t 60 -u http://www.yahoo.co.jp",
"interval": 600,
"occurrences": 3,
"subscribers": [
"test"
]
}
}
}

※10分ごとに http://www.yahoo.co.jp に対して疎通をし、3回以上疎通ができなかった場合、致命的状態を通知


SensuとUchiwaの自動起動設定と起動

/usr/bin/systemctl enable sensu-client sensu-server sensu-api uchiwa

/usr/bin/systemctl start sensu-client sensu-server sensu-api uchiwa


sensu-apiの動作確認

以下のcURLコマンドで確認します。

$ curl -s http://AAA.BBB.CCC.DDD:4567/info | jq .

{
"sensu": {
"version": "0.26.3"
},
"transport": {
"keepalives": {
"messages": 3,
"consumers": 1
},
"results": {
"messages": 0,
"consumers": 1
},
"connected": true
},
"redis": {
"connected": true
}
}
# これならOKです


Uchiwaの動作確認

ブラウザで、 http://AAA.BBB.CCC.DDD:3000/ にアクセスして以下の画面が表示されればOKです。

uchiwa.png

参考リンク

サーバー監視ツール Sensu


Sensu参考情報


Slack用通知ハンドラ

sensu-plugins/sensu-plugins-slackを利用


/opt/ansible/conf/slack-handler-notify.json

{

"handlers": {
"slack-notify": {
"type": "pipe",
"command": "handler-slack.rb -j slack-notify"
}
},
"slack-notify": {
"webhook_url": "https://hooks.slack.com/services/XXXXX",
"channel": "#any-channel",
"bot_name": "Sensu Bot",
"message_template" : "slack-template.erb"
}
}


Sensuの監視設定


設定例(check-cpu.json)

{

"checks": {
"cpu": {
"type": "standard",
"command": "check-cpu.rb -w 80 -c 95",
"interval": 600,
"occurrences": 3,
"subscribers": [
"common"
],
"handlers": [
"slack"
]
}
}
}


監視タイプ(type)

以下の2タイプの内いずれか使用するプラグインに合致したものを記載する

- standard・・・標準のcheck用のプラグイン

- metrics・・・metircs用のプラグイン

指定は、「"metrics"」で指定する

※上記の例では、「"standard"」を指定している

※省力した場合は、「"standard"」が指定される


設定名

設定の名称をつける

※上記の例では、「cpu」

※省略はできない


コマンド(command)

監視の際、クライアントにて実行されるコマンドを指定する

※上記の例では、「check-cpu.rb -w 80 -c 95」を指定している

※省略はできない(但し、公式ドキュメントに書いてある通り「extension」を指定すれば省略はできる)


間隔(interval)

監視が実行される間隔を秒単位指定する

※上記の例では、「600」(=600秒=10分)を指定している

※省略はできない


閾値(occurrences)

監視通知の閾値で、閾値回数継続してアラートの条件を満たした場合にアラート通知される

※上記の例では、「3」を指定している

※省略した場合は、「1」が指定される


対象クライアント(subscribers)

指定されたsubscribersに属するクライアントのみ監視対象とされる

複数の指定ができる

※上記の例では、「common」を指定している

※省略はできない(但し、公式ドキュメントに書いてある通り「standalone」を「true」に指定すれば省略はできる)


通知ハンドラ(handlers)

通知を行う際、指定された通知ハンドラを使用して通知される

複数の指定ができる

※上記の例では、「slack」を指定している

※省略した場合は、/etc/sensu/config.jsonの「handlers」の「default」の「handlers」に設定された通知ハンドラが指定される

参考リンク

Sensu | Checks

Sensu | Plugins

Sensuの監視の設定 - さよならインターネット

第361回 Sensuでサーバーのリソースを可視化しよう:Ubuntu Weekly Recipe|gihyo.jp … 技術評論社