背景
NewRelicは
・Webアプリケーションのパフォーマンス監視
・Webインフラのパフォーマンス監視
・死活監視/アラート
などができる便利なサーバー監視ツールであり、それらの統計情報をNewRelicのサイトでみることができる。
http://qiita.com/y_uuki/items/dd4fce78b1bc32b64600
だが、リアルタイムのサーバーの状態を把握するには常にサイトを見ていなければならないので、NewRelicのAPIを使ってサーバーの状態を取得しようと思った。
NewRelicのAPIはPython, Ruby, NodeJSなどの言語でそれぞれ用意されているみたいなので、とりあえず今回はPythonのnewrelic-apiを使ってみた。
newrelic-apiのインストール
pipまたはeasy_installでインストールできる。
easy_install newrelic-api
API Keyの取得
AdminユーザでAPI Keyを取得した。
・参考記事
http://qiita.com/CkReal/items/23a08cd8088876761911
newrelic-apiでの各サーバーの状態取得
NewRelic APIの公式ドキュメントを参考にサーバーの状態を取得した。
http://new-relic-api.readthedocs.org/en/develop/ref/servers.html
APIを叩くと、各サーバーのid, 名前, 状態などが配列で取得できるので、今回はその中の色によってサーバーの状態を表す"health_status"の値を取得した。
- health_status
- green: 正常
- yellow: 警告
- red: 危険
- gray: レポートなし
取得配列
{u'links': {u'server.alert_policy': u'/v2/alert_policies/{alert_policy_id}'},
u'servers': [{u'account_id': #{newrelic_account_id},
u'health_status': u'green',
u'host': #{newrelic_host},
u'id': #{server_id},
u'last_reported_at': u'2016-01-28T07:22:06+00:00',
u'links': {u'alert_policy': 205236},
u'name': #{server_name},
u'reporting': True,
u'summary': {u'cpu': 0.06,
u'cpu_stolen': 0.0,
u'disk_io': 0.0,
u'fullest_disk': 63.2,
u'fullest_disk_free': 7547000000,
u'memory': 63.7,
u'memory_total': 1043333120,
u'memory_used': 664797184}},
...
}]}
サンプルコード
#!/usr/bin/env python
# -*- coding:utf-8 -*-
from newrelic_api import servers
health_statuses = []
states = servers.Servers(#{API-key}).list()["servers"]
for state in states:
if state.has_key("health_status"):
health_statuses.append(state["health_status"])
print health_statues
出力結果
9台それぞれのサーバーの状態が取得できた
[u'green', u'green', u'green', u'green', u'green', u'green', u'green', u'green', u'orange']
まとめ
NewRelicのAPIを叩いでサーバーの状態を取得することができた
これを基に、一定時間ごとのサーバーの状態取得や、危険状態になった時にローカル上でアラートを出すなどの応用をしていこうと思う。