Sensuで始める
クラウド時代のシステム監視
@hiconyan
自己紹介
堀内 晨彦 (Akihiko Horiuchi)
香川大学 工学部 情報系学科 院卒
Emacs, Ruby, Hubot, Sensu, Ansible, Go
http://bit.ly/hiconyan
ECL 2.0のベアメタルクラウドチームに所属
開発と検証がメイン、たまに運用や問合せ対応
Ansible、Jenkinsによるデプロイの自動化
新しいOSやサーバに対応するための検証と実装
サービス基盤のコンテナ化の検証と実装
2
Sensuで始めるクラウド時代のシステム監視 - @IT
3
もくじ
今日知って貰いたいこと
Sensuの概要と基本的な構成、メリットとデメリット
Sensu Pluginを使った監視と通知
Sensu 1.0のリリースと2.0に向けて
今日は話さないこと
Sensu Enterpriseについて
Sensuとミドルウェアを冗長化する方法について
メトリクスの保存と可視化の方法について
4
Sensuとは?
https://sensuapp.org
Sensu, Inc. が開発しているRuby製の
オープンソース監視プラットフォーム
Nagiosの問題点を解決する目的で
2011年に Sean Porter を中心にスタート
「Sensu(扇子)」という名前は、竹を活用する日本文化と、
単機能をうまく組み合わせるUNIX哲学から影響を受けた
5
http://portertech.ca/2011/11/01/sensu-a-monitoring-framework/ 6
Nagiosの問題点
Sensu, a monitoring framework より
Nagios is NOT designed for the cloud.
The concept of elastic Infrastructure as a Service didn’t exist
at the time of its creation, and it has failed to adapt.
Our problems with Nagios
Configuration is unpleasant & restrictive
Cannot discover new servers on its own
Easily overwhelmed with a high number of clients & checks
Difficult to extend & hack
“
“
7
http://portertech.ca/2011/11/01/sensu-a-monitoring-framework/ 8
https://sensuapp.org/docs/latest/overview/architecture.html 9
Sensuのコンセプト
監視クライアントを自動で監視サーバに登録、削除できる
監視クライアントにエージェントをインストールするのみ
設定ファイルはJSON形式で、自由に分割することができる
sensu-chefやsensu-puppetを標準で提供
監視サーバやミドルウェアをスケールアウトできる
冗長化や大規模な環境での導入が可能
標準でRESTful APIを備えている
フロントエンドやツールなどとの連携が可能
10
https://uchiwa.io/ 11
Sensuを使うメリット
クラウド環境で監視コストを少なくできる
インスタンスの追加、削除に合わせて、
自動的に監視を開始、停止できる
設定がsensu-serverに集約されており、管理しやすい
ドキュメントやプラグインが充実している
公式ドキュメント: https://sensuapp.org/docs/latest/
プラグイン集: http://sensu-plugins.io/
12
Sensuを使うデメリット
使用するミドルウェアの知識が必要になる
RabbitMQとRedisを構築、運用する必要がある
ミドルウェアの冗長化や、スケールアウトの場合は…
メトリクスの保存・可視化の機能を備えていない
メトリクスの収集が可能だが、保存先が必要である
InfluxDB + Grafanaの組み合わせが一般的である
13
Sensu Pluginとは?
Check
死活監視やメトリクスの測定をするプラグイン
Nagios Pluginと互換性がある
Handler
監視結果をメールやチャットで通知するプラグイン
エスカレーションを行うサービスとの連携も可能
Mutator
Checkの結果をHandlerに渡す前に整形するプラグイン
14
独自プラグインの作成
https://github.com/sensu-plugins/sensu-plugin
開発を補助するフレームワークが提供されている
#!/opt/sensu/embedded/bin/ruby
require 'sensu-plugin/check/cli'
require 'net/http'
class CheckHttp < Sensu::Plugin::Check::CLI
option :url, short: '-u URL', long: '--url URL'
option :status, short: '-s CODE', long: '--status CODE'
def run
response = Net::HTTP.get_response(URI.parse(config[:url]))
if response.code == config[:status]
ok "#{config[:url]} #{response.code}"
else
critical "#{config[:url]} #{response.code}"
end
end
end
15
Sensu 1.0のリリース
Five Years of Sensu より
Sensu Core version 1.0 is now available! より
Five years by the numbers
over 20000 commits
contributions from over 300 developers
over 1500 issues closed
“
“
What’s Next?
Scheduled maintenance.
Check hooks.
Official Docker images.
“
“
16
Sensu 2.0に向けて
Sensu 2.0 // Speaker Deck
RubyからGoへ書き換える
RabbitMQはWebSocketに、RedisはEtcdに置き換える
APIの拡充 (全ての設定が可能に?)
PluginなどをAssetsとして配布する仕組みの導入
17
ありがとうございました
-

Sensuで始めるクラウド時代のシステム監視