サーバ構築 ミドルウェア

Sensu監視環境構築

更新日:

構成

Compornent用途
Sensu-Server監視サーバとしてRabbitMQを通じてクライアントとの監視結果のやり取りを行う
監視結果/監視設定はRedisに保存
Sensu-APIAPI受け付けて監視情報の取得や設定を行うことができる
Uchiwa監視コンソール画面
ブラウザで接続する
監視情報はSensu-APIを通じて取得
RabbitMQClient⇆Server間は全てキューを介した非同期通信で行われる
Redis監視設定や監視結果を保存
Redis-SentinelRedisの監視用として自動フェイルオーバやどのサーバがMaster(またはSlave)なのかを通知してくれる
Sensu-Client監視クライアント
監視結果をRabbitMQを通じてSensu-Serverへ通知する

前職場で構築した環境同様、全て3台構成で構築する。
RedisSentinel/RabbitMQはノードダウン判定に過半数必要なので3台は必須。(多分・・・)
Sensuは2台以上で冗長化できると思うが、他サーバに合わせて3台で作る。
Sensu-Server内でも各ノード毎に細かい役割があった気がするけど、忘れた。。。

構成イメージ図

構築手順

前提

  • Redis/Redis-Sentinelの環境は構築済み(https://blog.megunlabo.net/2018/04/06/redis-sentinel/)
  • RabbitMQの環境は構築済み(https://blog.megunlabo.net/2018/03/10/rabbitmq_cluster_provision/)
  • OSは全てCentOS7

インストール(Sensu-Server/Sensu-API/Sensu-Client/Uchiwa)

ServerもAPIもClientも一緒にインストールされる

  1. リポジトリ設定
[sensu]
name=sensu
baseurl=https://sensu.global.ssl.fastly.net/yum/$releasever/$basearch/
gpgkey=https://repositories.sensuapp.org/yum/pubkey.gpg
gpgcheck=1
enabled=1

インストール

sudo yum install sensu uchiwa

設定

RabbitMQにvhost/user作成

https://blog.megunlabo.net/2018/03/10/rabbitmq_commands/
参考にRabbitMQサーバ上でSensu用のvhostとユーザを作成する。

rabbitmqctl add_vhost /sensu
rabbitmqctl add_user sensu secret
rabbitmqctl set_permissions -p /sensu sensu '.*' '.*' '.*'

RabbitMQ接続設定

各SensuサーバにRabbitMQへの接続設定を記載する。

{
  "transport": {
    "name": "rabbitmq",
    "reconnect_on_error": true
  }
}
{
  "rabbitmq": [
    {
      "host": "192.168.22.11",
      "port": 5672,
      "vhost": "/sensu",
      "user": "sensu",
      "password": "secret",
      "heartbeat": 30,
      "prefetch": 50
    },
    {
      "host": "192.168.22.12",
      "port": 5672,
      "vhost": "/sensu",
      "user": "sensu",
      "password": "secret",
      "heartbeat": 30,
      "prefetch": 50
    },
    {
      "host": "192.168.22.13",
      "port": 5672,
      "vhost": "/sensu",
      "user": "sensu",
      "password": "secret",
      "heartbeat": 30,
      "prefetch": 50
    }
  ]
}

Redis接続設定

各SensuサーバにRedisへの接続設定を記載する。

{
  "redis": {
    "master": "mymaster",
    "sentinels": [
      {
        "host": "192.168.22.11",
        "port": 26379
      },
      {
        "host": "192.168.22.12",
        "port": 26379
      },
      {
        "host": "192.168.22.13",
        "port": 26379
      }
    ]
  }
}

Sensu-API用の設定

各SensuサーバにSensu-APIの設定を記載する。

{
  "api": {
    "host": "localhost",
    "bind": "0.0.0.0",
    "port": 4567
  }
}

Uchiwa設定

各Sensuサーバ上にUchiwaを起動する。
Uchiwa設定ファイルに自分自身のSensu-APIへ接続するようにする。
他のSensu-APIへの接続情報も記載できるが、今回は3台とも同じ監視をしているので、自分自身の情報のみ記載しておく。

{
  "sensu": [
    {
      "name": "sensu1",
      "host": "127.0.0.1",
      "port": 4567
    }
  ],
  "uchiwa": {
    "host": "0.0.0.0",
    "port": 3000
  }
}

プロセス再起動

各Sensuサーバ上のコンフィグ設定が完了したらプロセスを再起動する。

systemctl restart sensu-server
systemctl restart sensu-api
systemctl restart uchiwa

Uchiwaへ接続

http://xxx.xxx.xxx.xxx:3000 に接続してエラーなければOK

監視用プラグイン追加

Sensuで監視するためのプラグインを追加する。
https://github.com/sensu-plugins
必要なものをインストールする必要がある。
独自プラグイン作成して監視をすることも可能。
そのプラグインを使用するサーバへインストールする必要がある。

cpuチェックプラグインを追加

cpuの使用率をチェックするプラグイン

  • pluginのインストール
sensu-install -p cpu-checks
  • plugin直接実行
/opt/sensu/embedded/bin/check-cpu.rb

slackプラグイン追加

slackへ通知するプラグイン
サーバ側で使用するものなので、Sensuサーバのみにインストールする

  • pluginのインストール
sensu-install -p slack

check/handler設定

  • 監視設定(check)
{
  "checks": {
    "check-cpu": {
      "command": "check-cpu.rb -w :::cpu.warning|80::: -c :::cpu.critical|90:::",
      "interval": 60,
      "refresh": 10,
      "subscribers": ["all"],
      "handlers": ["slack"]
    }
  }
}
  • 通知設定(handler)
{
  "handlers": {
    "slack": {
      "type": "pipe",
      "command": "handler-slack.rb"
     }
  },
  "slack": {
    "webhook_url": "https://hooks.slack.com/services/xxxx/xxxx/xxxxxx",
    "icon_url": "https://avatars2.githubusercontent.com/u/10713628"
  }
}

Clientの設定

  • subscriptionsで監視内容を設定
  • cpuで個別に閾値を変更可能(check-cpu.jsonのcpu.warning/cpu.criticalと対応)
{
  "client": {
    "name": "client1",
    "address": "192.168.22.11",
    "environment": "production",
    "subscriptions": [
      "all",
      "web",
    ],
    "cpu": {
      "warning": 5,
      "critical": 10
    },
    "socket": {
      "bind": "127.0.0.1",
      "port": 3030
    }
  }
}
  • client側のRabbitMQ接続設定
{
  "transport": {
    "name": "rabbitmq",
    "reconnect_on_error": true
  }
}
{
  "rabbitmq": [
    {
      "host": "192.168.22.11",
      "port": 5672,
      "vhost": "/sensu",
      "user": "sensu",
      "password": "secret",
      "heartbeat": 30,
      "prefetch": 50
    },
    {
      "host": "192.168.22.12",
      "port": 5672,
      "vhost": "/sensu",
      "user": "sensu",
      "password": "secret",
      "heartbeat": 30,
      "prefetch": 50
    },
    {
      "host": "192.168.22.13",
      "port": 5672,
      "vhost": "/sensu",
      "user": "sensu",
      "password": "secret",
      "heartbeat": 30,
      "prefetch": 50
    }
  ]
}

下記のようにみえてればOK

-サーバ構築, ミドルウェア
-

Copyright© 明日から頑張ります。 , 2025 All Rights Reserved Powered by STINGER.