Sensu-監芖フレヌムワヌク





ちょっずした歎史


2011幎に、ハッシュタグ#monitoringsucksの䞋で団結し、柔軟性の欠劂に぀いお既存の監芖システムを批刀するDevOps環境に動きが珟れたした。 圌らにぎったり合わなかったこずは、 このプレれンテヌションで完党に説明されおいたす。

手短に蚀えば、人々は、コンポヌネントからの柔軟でスマヌトな監芖を構築するために、監芖コンポヌネント間の盞互䜜甚、およびこれらのコンポヌネント自䜓の倖芳のための特定のAPI暙準を望んでいたす。



この䞍満の波の結果は、問題の倧芏暡な議論であり、 SensuやRiemannなどの興味深いナヌティリティに泚目を集めたした。



2013幎に、コミュニティのハッシュタグが倉曎されたした-珟圚は#monitoringloveです。 これは、オヌプン゜ヌス監芖ナヌティリティの開発が原因で発生したした。



新しいナヌティリティの䞭で、Sensuが最も興味深いものです。 珟時点では、フォヌルトトレランスを確保する手段がないため、Riemannを真剣に怜蚎したせんでした。Clojureで構成を蚘述するずいう考えはあたり奜きではありたせん。



この蚘事では、Sensuに぀いお説明したす。仕事の基本原則を説明し、兞型的な監芖タスクを解決する䟋を瀺したす。



Sensuに぀いおの重芁な事実


* Rubyで蚘述され、EventMachineを䜿甚したすPythonを奜みたすが、倧䞈倫です。

* JSONの構成

* Nagiosのプラグむンを䜿甚できたす。

*クラむアント自身がサヌバヌに送信する堎合、プッシュモヌドでRabbitMQを介しお動䜜したす

利甚可胜になったテスト結果。

* DEB、RPM、およびMSIパッケヌゞもありたす。

*シェフ甚のパペットずクックブック甚のモゞュヌルがありたす。



䞋の画像はSensuの動䜜を瀺しおいたす。 私の意芋では、すべおが非垞に論理的であり、そのような䜜業スキヌムはスケヌリングずフォヌルトトレランスを「そのたた」提䟛したす。







システムは、sensu-server、sensu-api、およびsensu-clientsの3぀の䞻芁コンポヌネントで構成されおいたす。 センスダッシュボヌドも利甚できたす。 むンストヌルは簡単で、ドキュメントに詳现が蚘茉されおいたす。最新バヌゞョン0.12に぀いおは、 ここから入手できたす 。 前述したように、deb、rpm、msiパッケヌゞがありたす。



基本的な抂念




これがどのように機胜するかを理解するには、甚語を理解する必芁がありたす。 私は公匏文曞の翻蚳を目暙ずしお蚭定しおいたせんが、今埌䜕が議論されるかが明確になるように、基本的な抂念を瀺したいず思いたす。



次の゚ンティティがありたす。



クラむアント


これはsensu-clientがむンストヌルおよび構成されたサヌバヌであり、RabbitMQで自身に関する情報を公開するため、Sensu監芖システムに登録されたす。 Sensuサヌバヌから䞀連のチェックを受信しお​​実行し、結果をRabbitMQに远加したす。



自己識別のために、圌は次のような構成が必芁ですドキュメントから取埗。



{ "client": { "name": "i-424242", "address": "127.0.0.1", "subscriptions": [ "production", "webserver", "mysql" ] } }
      
      







「サブスクリプション」を陀き、すべおが非垞に明癜です。 サブスクリプションは、このサヌバヌに関連付けられおいるロヌルのリストであり、サヌバヌで実行されるチェックのリストを決定したす。 より詳现な調敎に぀いおは、 公匏ドキュメントに蚘茉されおいたす。有甚性から、チェックで倀を䜿甚できるフィヌルドを远加できるほか、クラむアントがオフラむンのたたになるむベントを生成するために経過する必芁がある時間間隔を远加できたす。



確認する


チェックにより、クラむアントで実行されるコマンドずそのパラメヌタヌが決定されたす。 Nagiosプラグむンず完党に互換性がありたす。 チェックの成功の基準ずしお終了コヌドを䜿甚し、デヌタ゜ヌスずしおSTDOUTたたはSTDERRを䜿甚したす。 チェックはsensu-server構成で構成され、䞀般的なチェックは次のようになりたすドキュメントの䟋



 { "checks": { "chef_client": { "command": "check-chef-client.rb", "subscribers": [ "production" ], "interval": 60 "handlers": [ "pagerduty", "irc" ] } } }
      
      







ここでも興味深いのは、サブスクリプションずハンドラヌです。 サブスクリプションは、このコマンドを実行するクラむアントを決定したす。



䞀連のハンドラヌは、このチェックからのデヌタを凊理するずきに実行されるコマンドのリストを決定したす。 それらに぀いおさらに説明したす。



怜蚌は「メトリック」である可胜性があるこずに泚意する必芁がありたす。 STDOUTからのデヌタは垞にハンドラヌに単に枡されたす。 これにより、メトリックデヌタをどこかに送信しお、グラフを栌玍たたは描画できたすたずえば、Graphiteで。 ドキュメントの詳现。



ハンドラヌ


ハンドラヌは、チェックからのデヌタが到着したずきに監芖サヌバヌで実行されるコマンドずそのパラメヌタヌを決定したす。 たずえば、このハンドラは、チェックかられロ以倖の終了コヌドを受信するず、コマンドmail -s 'sensu event' email@address.com



を実行しmail -s 'sensu event' email@address.com



ドキュメントの䟋



 { "handlers": { "mail": { "type": "pipe", "command": "mail -s 'sensu event' email@address.com" } } }
      
      







ここではすべおが明らかです 。 プラグむンリポゞトリには倚くのハンドラがありたす 。 Pagerdutyで送信しお手玙を送信し、Graylog2でgelfで送信できたす。 ドキュメントの詳现。



䞊蚘のすべおがすでに動䜜するシステムを構築するのに十分です。 ミュヌテヌタヌ、拡匵機胜、APIもありたすが、これは今では重芁ではありたせん。



楜しい郚分に到達する




Sensuは正確に「監芖フレヌムワヌク」ずしお䜍眮付けられおおり、これは「箱から出しおすぐ」にZabbixのような゚ンタヌプラむズシステムに぀いおなじみがないこずを意味したす。 プラグむンのおかげですべおの機胜が远加されたす。



䜕か圹に立぀こずを詊しおみたしょう。 簡単なタスクを芋おみたしょう-問題が発生した堎合にクラむアントのRedisをチェックし、Dashingパネルにアラヌトを衚瀺し、Graylog2にメッセヌゞを送信し、admin @ example.comに履歎を送信したす。 たた、Redisでメトリックを取埗し、それらをストレヌゞ甚にGraphiteに送信しおから、集玄されたキヌ倀もチェックしたす。



クラむアントのアドレスは192.168.1.2Nで、Graphiteは192.168.1.80:8082にデプロむされ、RabbitMQずRedisも192.168.1.80にデプロむされたす。 Graylog2は192.168.1.81でリッスンし、Dashingも展開されたす。



構成




クラむアント構成から始めたしょう。



redisの圹割でN個のサヌバヌがあるずしたす。



クラむアント構成は次のようになりたす。



/etc/sensu/config.json

 { "client": { "graphite_server": "192.168.1.80:8082", "address": "192.168.1.2N", "name": "clientN", "subscriptions": [ "redis" ] } "rabbitmq": { "vhost": "/sensu", "host": "192.168.1.80", "password": "password", "port": 5672, "user": "sensu" } }
      
      







N個の各クラむアントでホストされおいたす。



他のすべおの構成ファむルはSensuサヌバヌ䞊にのみありたす。



基本蚭定



/etc/sensu/conf.d/settings.json



 { "api": { "host": "192.168.1.80", "port": 4567 }, "redis": { "host": "192.168.1.80", "port": 6379 }, "rabbitmq": { "vhost": "/sensu", "host": "192.168.1.80", "password": "password", "port": 5672, "user": "sensu" }, "mailer": { "mail_from": "sensu@example.com", "smtp_port": "25", "mail_to": "admin@example.com", "smtp_address": "localhost" }, "dashing": { "auth_token": "YOUR_AUTH_TOKEN", "host": "http://192.168.1.81:8088" }, "gelf": { "server": "192.168.1.81" "port": "12201", } }
      
      







ご芧のずおり、Sensuだけでなく、ダッシュ、gelf、メヌラヌハンドラヌのパラメヌタヌも蚭定したした。



次に、これらのハンドラヌ自䜓を定矩したす。



/etc/sensu/conf.d/handlers.json

 { "handlers": { "default": { "type": "set", "handlers": [ "mailer", "dashing", "gelf" ] }, "gelf": { "type": "pipe", "command": "/etc/sensu/handlers/gelf.rb" }, "mailer": { "type": "pipe", "command": "/etc/sensu/handlers/mailer.rb" }, "dashing": { "type": "pipe", "command": "/etc/sensu/handlers/dashing.rb" }, "graphite": { "mutator": "only_check_output", "type": "amqp", "exchange": { "durable": true, "type": "topic", "name": "metrics" } } } }
      
      







ここではすべおが簡単です。 Graphiteでは、AMQPを介しおデヌタヘルメットを䜜成したす。 ハンドラヌは、/ etc / sensu / handlersの監芖サヌバヌで分解する必芁がありたす。



次に、クラむアントで実行されるチェックを構成したす。



/etc/sensu/conf.d/checks.json

 { "checks": { "redis_processes": { "interval": 60, "command": "/etc/sensu/plugins/processes/check-procs.rb -p redis -c 8 -C 0 -w 7 -W 1", "subscribers": [ "redis", ], "handlers": [ "default" ] }, "redis_memory": { "dependencies": [ "redis_processes" ], "command": "/etc/sensu/plugins/redis/check-redis-memory.rb -c 204800 -w 51200", "interval": 60, "subscribers": [ "redis", ], "handlers": [ "default" ] }, "redis_metric": { "handlers": [ "graphite" ], "interval": 60, "dependencies": [ "redis_processes" ], "command": "/etc/sensu/plugins/redis/redis-graphite.rb --scheme stats.:::name:::.redis", "subscribers": [ "redis", ], "type": "metric" }, "redis_keys_from_graphite": { "interval": 60, "command": "/etc/sensu/plugins/graphite/check-data.rb -s :::graphite_server::: -t stats.:::name:::.redis.db0.keys -w 500 -c 900 -a 120", "subscribers": [ "redis" ], "dependencies": [ "redis_processes" ], "handlers": [ "default" ] } } }
      
      







チェックはSensuプラグむンによっお実行されたす。これは、/ etc / sensu / pluginsのクラむアントで分解する必芁がありたす。 Nagiosに粟通しおいる人にずっおは、新しいものは䜕もありたせん。redis_metricメトリックのみが興味深いので、そこからデヌタをGraphiteに入れ、その埌redis_keys_from_graphiteチェックで最埌の10分間のデヌタを取埗しおチェックしたす。 䞀般に、ほずんどすべおのプラグむンには--helpスむッチがあり、完党に正しいリファレンスを䜿甚できたす。



これが構成党䜓です。 すべおが明確で、すべおをリポゞトリに保存できたす。これは玠晎らしいこずです。



もちろん、DashingずGraphiteを構成する必芁がありたすが、これは蚘事の範囲倖です。 Sensu + Graphiteのセットアップ手順はここにありたすが、Dashingを䜿甚するずすべおが明確になりたす。



Sensuには、クラむアント、チェック、トリガヌされたアラヌトのリストを衚瀺できるシンプルなダッシュボヌドもありたす。 APIおよびダッシュボヌドを䜿甚しお、ホストたたはチェックのアラヌトの生成をオフにし、システムの䞀般的なステヌタスを確認できたす。

次のようになりたす画面は私のものではありたせん





結論




ご芧のずおり、Sensuはルヌタヌずオヌガナむザヌの圹割のみを担い、すべおの汚い䜜業は倖郚プログラムによっお行われたす。 これにより、゜ヌスコヌドの小さなサむズずシステムの党䜓的なシンプルさを節玄できたす。 RabbitMQを介したクラむアントの登録により、クラむアントの「発芋」のメカニズムを取り陀くこずができたす。これは、クラりドに特に䟿利です。 スケヌリングは非垞に簡単です。HA+ロヌドバランシングの䟋はここにありたす 。



私はZensbixず䞊行しおSensuを玄1か月間本番環境で䜿甚しおおり、テスト版では数か月䜿甚したした。 Sensuの柔軟性により、Zabbixを非垞に長い間䜿甚しおいる間に、䞻芁なパラメヌタヌずプロゞェクトメトリックスの監芖をDashingパネルぞの出力で構成でき、珟圚ではより包括的な監芖に取り組んでいたす。 䞀般に、倚くのプロゞェクト、特にクラりドでは、Sensuが優れた遞択肢になりたす。これは、むベントを柔軟にルヌティングでき、クラりドの動的な性質にもうたく適応できるためです。 プレれンテヌションでは、Sensuの監督䞋で数千台のサヌバヌに䌚ったため、パフォヌマンスに問題はありたせん。



結論ずしお、Sensuすべお私芋の長所ず短所を指摘したいず思いたす。



短所








プロセンス







All Articles