LoginSignup
10
8

More than 5 years have passed since last update.

Zabbix 3.2でsidekiqのキューなどを監視する - Amazon Linux編

Last updated at Posted at 2017-02-15

前回のZabbix 3.2でsidekiqを監視する - Amazon Linux編では、sidekiqのプロセス監視などをしましたが、sidekiqにどのくらいのキューがたまっているかなどは監視できていませんでした。

キューの数を監視することにより、キューの数が溜まっていたらsidekiqの処理能力が限界を迎えている可能性があるので、ワーカーの数を増やす必要があるので、重要な監視項目です。

Stats

sidekiqには監視APIがついており設定にもよりますが、/admin/sidekiq/statsのURLにアクセスすると以下のようなJSONが取得できます。

{
  "sidekiq": {
    "processed": 166,
    "failed": 79,
    "busy": 0,
    "processes": 1,
    "enqueued": 0,
    "scheduled": 0,
    "retries": 0,
    "dead": 12,
    "default_latency": 0
  },
  "redis": {
    "redis_version": "2.8.23",
    "uptime_in_days": "310",
    "connected_clients": "42",
    "used_memory_human": "61.38M",
    "used_memory_peak_human": "65.63M"
  }
}

今回redisは監視しないですが、sidekiqの項目について以下に記します。

  • processed: デフォルトで5年間のうちに処理したジョブの数が取得できます。5年だと多いので、1時間に処理した数とかに変えて自分で取得するのもよさそうです。
  • failed: 同じく5年間でジョブが失敗した数
  • busy: 現在実行されているジョブの数
  • processes: 現在実行されているsidekiqのプロセス数
  • enqueued: Queueに積まれているジョブの数(retriesとscheduledは含まない)
  • scheduled: Scheduled Jobsのジョブ数
  • retries: ジョブ実行中に失敗したRetries待ちのジョブの数
  • dead: デフォルトで25回(DEFAULT_MAX_RETRY_ATTEMPTS)リトライした後に、まだ失敗していれば、sidekiqはジョブをDead Job Queueに入れます。そのDead Job Queueの数です。ここここに詳細があります。
  • default_latency: ここによるとキューの最初につまれているジョブの積まれた時間と現在の時間との差です。要するに、ジョブがどのくらい実行されるまで待っていた時間です。

各監視項目の取得方法

JSONでレスポンスが帰ってくるのでjqでパースすることにします。なおjqはyum install jqでインストールできます。
以下のようにするとprocessedの値がとれます。その他は同じようにして取得できます。

curl -s http://127.0.0.1/admin/sidekiq/stats | jq -r '.sidekiq.processed'

Zabbixで監視項目に加える

まず、userparameterを作ります。

vi /etc/zabbix/zabbix_agentd.d/userparameter_sidekiq.conf

以下の項目を追加します。
UserParameter=sidekiq.processed,curl -s http://127.0.0.1/admin/sidekiq/stats | jq -r '.sidekiq.processed'
UserParameter=sidekiq.failed,curl -s http://127.0.0.1/admin/sidekiq/stats | jq -r '.sidekiq.failed'
UserParameter=sidekiq.busy,curl -s http://127.0.0.1/admin/sidekiq/stats | jq -r '.sidekiq.busy'
UserParameter=sidekiq.processes,curl -s http://127.0.0.1/admin/sidekiq/stats | jq -r '.sidekiq.processes'
UserParameter=sidekiq.enqueued,curl -s http://127.0.0.1/admin/sidekiq/stats | jq -r '.sidekiq.enqueued'
UserParameter=sidekiq.scheduled,curl -s http://127.0.0.1/admin/sidekiq/stats | jq -r '.sidekiq.scheduled'
UserParameter=sidekiq.retries,curl -s http://127.0.0.1/admin/sidekiq/stats | jq -r '.sidekiq.retries'
UserParameter=sidekiq.dead,curl -s http://127.0.0.1/admin/sidekiq/stats | jq -r '.sidekiq.dead'
UserParameter=sidekiq.default_latency,curl -s http://127.0.0.1/admin/sidekiq/stats | jq -r '.sidekiq.default_latency'

zabbixを再起動してキーの値がすべて取れるか確認します。

# 再起動
sudo service zabbix-agent restart

# 確認
zabbix_get -s 127.0.0.1 -k sidekiq.processes --tls-connect=psk --tls-psk-identity=zabbix_agent --tls-psk-file=/etc/zabbix/zabbix_agentd.psk
zabbix_get -s 127.0.0.1 -k sidekiq.failed --tls-connect=psk --tls-psk-identity=zabbix_agent --tls-psk-file=/etc/zabbix/zabbix_agentd.psk
zabbix_get -s 127.0.0.1 -k sidekiq.busy --tls-connect=psk --tls-psk-identity=zabbix_agent --tls-psk-file=/etc/zabbix/zabbix_agentd.psk
zabbix_get -s 127.0.0.1 -k sidekiq.processes --tls-connect=psk --tls-psk-identity=zabbix_agent --tls-psk-file=/etc/zabbix/zabbix_agentd.psk
zabbix_get -s 127.0.0.1 -k sidekiq.enqueued --tls-connect=psk --tls-psk-identity=zabbix_agent --tls-psk-file=/etc/zabbix/zabbix_agentd.psk
zabbix_get -s 127.0.0.1 -k sidekiq.scheduled --tls-connect=psk --tls-psk-identity=zabbix_agent --tls-psk-file=/etc/zabbix/zabbix_agentd.psk
zabbix_get -s 127.0.0.1 -k sidekiq.retries --tls-connect=psk --tls-psk-identity=zabbix_agent --tls-psk-file=/etc/zabbix/zabbix_agentd.psk
zabbix_get -s 127.0.0.1 -k sidekiq.dead --tls-connect=psk --tls-psk-identity=zabbix_agent --tls-psk-file=/etc/zabbix/zabbix_agentd.psk
zabbix_get -s 127.0.0.1 -k sidekiq.default_latency --tls-connect=psk --tls-psk-identity=zabbix_agent --tls-psk-file=/etc/zabbix/zabbix_agentd.psk

前回作ったTemplate App Sidekiq Serviceに上記の項目を加えていきます。
以下に例を示します。Triggerの値はプロジェクトによると思うので各自設定してください。
Enqueued、Retries、Default Latencyくらいを監視するのがよさそうです。

Cursor_と_zabbix_conobie_jp__アイテムの設定.png

Cursor_と_zabbix_conobie_jp__グラフの設定.png

テンプレートスクリーンの作成

テンプレートにスクリーンを作れる項目がありますが、こちらはマップをつくらないと、参照することができません。(ここにあるようにすごくわかりにくい)

Cursor_と_zabbix_conobie_jp__スクリーンの設定_と_「Zabbix_3_2でsidekiqのキューなどを監視する_-_Amazon_Linux編」を編集_-_Qiita.png

上記のようなスクリーンを作ってから、マップをつくります。

マップは[監視データ]->[マップ]から作成できます。

Cursor_と_zabbix_conobie_jp__ネットワークマップ.png

上記のようにクリックしたらホストインベントリを選ぶとスクリーンが表示されます。[監視データ]->[スクリーン]からはいけないのですごく不便ですorz..

マップの変更は、マップ画面にて、右上のほうにあるマップ変更というボタンを押してやるのですが、以下のように適用を押してもポップアップ画面が消えないので、適用されたかわかりにくいです。(適用はされています)

Cursor_と_zabbix_conobie_jp__ネットワークマップの設定.png

まとめ

上記の手順でZabbixのキューや実行までのレイテンシーが計測できるようになりました。
ジョブキューは時間によっては負荷が高くなったりするのでその際も正しく捌けているか確認するためにも監視は重要となってきます。

10
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
8