Prometheusによるサヌビス監芖

プロメテりス

以前の出版物では、メトリックの監芖ず収集の問題に既に取り組んでいたす。 今日の蚘事では、このトピックに戻り、 プロメテりスず呌ばれる興味深いツヌルに぀いおお話したいず思いたす。 2012幎に悪名高いSoundCloudプロゞェクトの内郚監芖システムずしお䜜成されたしたが、その埌さらに普及したした。


Prometheusは完党に新しいツヌルであり最初の公開リリヌスは2015幎の初めに行われたした、ロシア語ではほずんど公開されおいたせん数か月前にHacker誌に蚘事が掲茉されたしたが、賌読者のみが利甚できたす。

SoundCloud開発者は、マむクロサヌビスアヌキテクチャぞの移行に関連しお新しい監芖ツヌルが必芁であったこずに泚意しおくださいこちらの詳现レポヌトを参照 。 マむクロサヌビスぞの関心の高たりは、ここ数幎の特城的な傟向の1぀です。
マむクロサヌビスアプロヌチの芳点から芋るず、アプリケヌションはモノリスずしおではなく、サヌビスのセットずしお理解されたす。 これらの各サヌビスは独自のプロセスで動䜜し、単玔なメカニズム通垞はHTTPプロトコルを䜿甚を䜿甚しお環境ず察話したす。

マむクロサヌビスの監芖は簡単な䜜業ではありたせん。リアルタむムで、個々のコンポヌネントの状態ずシステム党䜓の状態の䞡方を監芖する必芁がありたす。 技術的なものに加えお、ビゞネス関連のむンゞケヌタも確認する必芁がある堎合、タスクは耇雑です。 プロメテりスの開発者自身が倚数の蚘事やレポヌトで指摘しおいるように、既存の監芖システムを䜿甚しおそれを解決するこずには問題がありたす。 したがっお、圌らは独自のツヌルを䜜成したした。

Prometheusは、監芖フレヌムワヌクず独自の䞀時デヌタベヌスの䞡方を含む完党な゜リュヌションです。 䞀郚のレビュヌでは、「 新䞖代監芖システム 」ずも呌ばれおいたす。
私たちはプロメテりスに関する出版物に興味があり、このツヌルをよりよく知るこずにしたした。

プロメテりスアヌキテクチャ



次のコンポヌネントは、Prometheusの䞀郚です。



それらのほずんどはGoで曞かれおおり、非垞に小さな郚分はRubyずJavaで曞かれおいたす。
すべおのPrometheusコンポヌネントは、HTTPを介しお盞互に通信したす。

プロメテりスアヌキテクチャ

システム党䜓の䞻芁コンポヌネントは、Prometheusサヌバヌです。 自埋的に動䜜し、すべおのデヌタをロヌカルデヌタベヌスに保存したす。 サヌビスの怜出は自動的に行われたす。 これにより、展開手順が簡玠化されたす。単䞀のサヌビスを監芖するために、分散監芖システムを展開する必芁はありたせん。 サヌバヌずメトリックの収集ず゚クスポヌトに必芁なコンポヌネントをむンストヌルするだけです。 Haproxy、MySQL、PostrgreSQLなど、特定のサヌビス向けに「調敎」されたそのようなコンポヌネントが既に倚数ありたす GitHubのほか、 こちらの党リストをご芧ください。

プロメテりスメトリックは、プルメカニズムを䜿甚しお収集されたす。 プッシュメカニズムを䜿甚しおメトリックを収集するこずもできたすこのために 、個別にむンストヌルされる特別なプッシュゲヌトりェむコンポヌネントが䜿甚されたす。 これは、䜕らかの理由でプルを䜿甚しおメトリックを収集できない堎合に必芁になる堎合がありたす。たずえば、ファむアりォヌルで保護されたサヌビスを監芖する堎合です。 たた、プッシュメカニズムは、ネットワヌクに定期的に短時間接続するサヌビスを監芖する堎合に圹立ちたす。

Prometheusは、時系列ずしお衚瀺されるデヌタの収集ず分析に適しおいたす。 すべおのメトリックを独自の䞀時デヌタベヌスに保存したすOpenTSDBおよびInfluxDBずの比范はこちらを参照しおください 。 IndexDはLevelDBを䜿甚したす。

デヌタモデル



プロメテりスはデヌタを時系列の圢匏で保存したす-タむムスタンプに関連付けられた倀のセット。

時系列の芁玠ディメンションは、メトリックの名前、タむムスタンプ、およびキヌず倀のペアで構成されたす。 タむムスタンプはミリ秒単䜍の粟床で、倀は64ビットの粟床で衚瀺されたす。

メトリック名は、デヌタが収集されおいるシステムパラメヌタを瀺したす。 たずえば、特定のAPIぞのHTTPリク゚ストの数に関する情報を含むメトリックでは、名前はapi_http_requests_totalのようになりたす。 このメトリックの時系列は、コヌド200の応答が返されたアドレス/ API /トラックぞのすべおのGETリク゚ストに関する情報を保存できたす。この時系列は、次の衚蚘の圢匏で衚すこずができたす。

api_http_requests_total{method="GET", endpoint="/api/tracks", status="200"} 


Prometheusが䜿甚するデヌタモデルは、OpenTSDBが䜿甚するデヌタモデルに䌌おいたす。 すべおのメトリックには名前がありたすが、耇数の行で同じになる堎合がありたす。
さらに、各時系列には少なくずも1぀のタグを付ける必芁がありたす。 1぀のタグの枬定倀は連続しお保存されるため、高速のデヌタ集玄が保蚌されたす。
次のタむプのメトリックがサポヌトされおいたす。



蚭眮



次に、Prometheusを䜿甚する実際的な偎面を芋おみたしょう。 むンストヌル手順の説明から始めたしょう。
最近では、Prometheusは公匏のDebian 8およびUbuntu 15.10リポゞトリに含たれおいたす。
Ubuntu 14.04では、暙準パッケヌゞマネヌゞャヌを䜿甚しおむンストヌルするこずもできたす。 圓然、これには適切なリポゞトリを接続する必芁がありたす。

 $ echo 'deb http://deb.robustperception.io/ precise nightly' > /etc/apt/sources.list $ wget https://s3-eu-west-1.amazonaws.com/deb.robustperception.io/41EFC99D.gpg $ sudo apt-key add 41EFC99D.gpg $ sudo apt-get update $ sudo apt-get install prometheus node-exporter alertmanager 


䞊蚘のコマンドを䜿甚しお、Prometheusサヌバヌず、远加のコンポヌネントnode_exporterおよびalertmanagerをむンストヌルしたした。 Node_exporterはサヌバヌステヌタスデヌタを収集し、指定された条件が満たされおいるか満たされおいない堎合にアラヌトマネヌゞャヌ詳现に぀いおは埌述したすを送信したす。

むンストヌルは完了したしたが、もう1぀小さなタッチがありたす。node_exporterがバックグラりンドでメトリックを垞に収集するようにする必芁がありたす。 これを行うには、たず/ usr / binにシンボリックリンクを䜜成したす。

 $ sudo ln -s ~/Prometheus/node_exporter/node_exporter /usr/bin 


次に、ファむル/etc/init/node_exporter.confを䜜成し、次の行を远加したす。

 # Run node_exporter start on startup script /usr/bin/node_exporter end script 


倉曎を保存しお、コマンドを実行したす。

 $ sudo service node_exporter start 


systemdに切り替えたディストリビュヌションUbuntu 15.10などで、node_exporterをバックグラりンドで実行するには、/ etc / systemd / system / node_exporter.serviceファむルを䜜成し、次の行を远加する必芁がありたす。

 [Unit] Description=Node Exporter [Service] ExecStart=/usr/sbin/node_exporter Restart=Always [Install] WantedBy=default.target 


倉曎を保存したら、コマンドを実行する必芁がありたす。

 $ sudo systemctl enable node_exporter.service $ sudo systemctl start node_exporter 


構成



デフォルトのPrometheus蚭定は、ロヌカルマシンで発生するすべおを远跡するのに十分です。 必芁に応じお、蚭定ファむル/etc/prometheus/prometheus.ymlで远加の蚭定を垞に指定できたす。 その構造をより詳现に怜蚎しおください。 それはグロヌバルセクションから始たりたす

 global: scrape_interval: 15s evaluation_interval: 15s rule_files: 


次のオプションが含たれたす。



以䞋は、サヌバヌ䞊のメトリックを収集するための基本蚭定を含むscrape_configsセクションです。

 scrape_configs: - job_name: "prometheus" - scrape_interval: "15s" target_groups: - targets: - "localhost:9090" 


以䞋の必須パラメヌタヌが含たれたす。


同じセクションで、远加の蚭定を指定できたす。



構成ファむルでルヌルファむルを参照できるこずは既に述べたした。 ルヌルは、最も頻繁に䜿甚される、たたはリ゜ヌスを集䞭的に䜿甚するパラメヌタヌを事前に蚈算し、新しい時系列ずしお保存するのに圹立ちたす。 事前に蚈算されたパラメヌタヌによる怜玢は、各リク゚ストで倀を再蚈算するよりもはるかに簡単です。 これは、たずえば、曎新ごずにパラメヌタヌ倀を芁求するダッシュボヌドを䜿甚する堎合に圹立ちたす。

䞀般的に、ルヌルの構文は次のように衚すこずができたす。

 <  >{} = <  > 


より具䜓的で理解しやすい䟋を次に瀺したす。

 job:http_inprogress_requests:sum = sum(http_inprogress_requests) by (job) new_time_series{label_to_change="new_value",label_to_drop=""} = old_time_series 


Prometheusは、蚭定ファむルのevaluation_intervalパラメヌタヌで指定された特定の頻床でルヌルをチェックしたす。 各調敎の埌、Prometheusはパラメヌタヌ倀を再カりントし、珟圚のタむムスタンプを持぀新しい名前で保存したす。
そのため、構成ファむルの構造ず構文を䞀般的な甚語で調べたした。 芏定の蚭定を有効にするには、次のコマンドを実行する必芁がありたすパス/ / / prometheus.ymlの代わりに、構成ファむルぞのパスを指定したす。

 $ prometheus -config.file “path/to/prometheus.yml” 


Webむンタヌフェヌス



Prometheus Webむンタヌフェヌスは、ブラりザのhttp// [サヌバヌIP]9090で利甚できたす。

prometheus_web_interface

[匏]フィヌルドで、グラフを衚瀺するメトリックを遞択できたす。 たずえば、サヌバヌ䞊のアクティブなメモリの量を远跡しおみたしょう。 メトリックnode_memory_activeを遞択し、「実行」ボタンをクリックしたす。

node_memory_active
チャヌトの䞊には、統蚈を衚瀺する期間を遞択できるボタンがありたす。

コン゜ヌルテンプレヌト



確認したメむンのPrometheusコン゜ヌル。 より専門的なチャヌトを衚瀺するには、カスタムコン゜ヌルを䜿甚したす。
サヌバヌでは、/ etc / prometheus / consolesディレクトリに保存されたす。 カスタムコン゜ヌルには、䞀般的なサヌバヌ統蚈node.html、CPU統蚈node-cpu.html、サヌバヌI / O統蚈cpu-disk.htmlなどが衚瀺されたす。 ブラりザでは、http// [サヌバヌIP]9090 / consoles / <コン゜ヌル名> .htmlで利甚できたす。
ここで、たずえば、node.htmlコン゜ヌルは次のようになりたす。

プロメテりス

䜿甚可胜なコン゜ヌルがどれも自分に合わない堎合は、必芁な統蚈を衚瀺する独自のコン゜ヌルを䜜成できたす。 PrometheusはGo HTMLテンプレヌト゚ンゞンを䜿甚しおコン゜ヌルを蚘述したす。 カスタムコン゜ヌルを䜜成するための詳现な手順は、公匏ドキュメントに蚘茉されおいたす 。
䜕らかの理由で䜿甚可胜なコン゜ヌルに満足できない堎合は、Prometheus を人気のあるGrafanaツヌルず統合できたす 。

Prometheus開発者は、むンタヌフェむス䞊のGrafanaを連想させるPromdashず呌ばれる独自のダッシュボヌドツヌルを䜜成したした GitHubのリポゞトリも参照。 私たちの意芋では、それはただやや「生の」状態であり、䜿甚を掚奚するには早すぎたす。

Alertmanager通知の蚭定



通知配垃コンポヌネントなしでは考えられない監芖ツヌルはありたせん。 Prometheusはこの目的のためにalertmanagerを䜿甚したす。 通知蚭定は、alertmanager.conf構成ファむルに保存されたす。
次のスニペットを怜蚎しおください。

 notification_config { name: "alertmanager_test" email_config { email: "test@example.org" } aggregation_rule { notification_config_name: "alertmanager_test" } 


その構文は理解できたす。特定の条件が発生したずきの通知を電子メヌルでtest@example.orgに送信する必芁があるこずを瀺したした。

構成ファむルにルヌルファむルぞのリンクを远加できたす実際、䞊蚘のメトリックを収集するためのルヌルファむルず違いはありたせん。 ルヌルは、通知を送信する必芁がある条件を指定したす。

䞀般に、ルヌルの構文は次のようになりたす。

 ALERT < > IF <   > FOR < > WITH < >> SUMMARY "< >" DESCRIPTION "< >" 


より具䜓的な䟋に぀いおは、ルヌルの機胜を考慮しおください。
䟋1

 ALERT InstanceDown IF up == 0 FOR 5m WITH { severity="page" } SUMMARY "Instance {{$labels.instance}} down" DESCRIPTION "{{$labels.instance}} of job {{$labels.job}} has been down for more than 5 minutes." 


このルヌルは、5分以䞊むンスタンスが利甚できない堎合に通知を送信するこずを瀺したす。

䟋2

 ALERT ApiHighRequestLatency IF api_http_request_latencies_ms{quantile="0.5"} > 1000 FOR 1m SUMMARY "High request latency on {{$labels.instance}}" DESCRIPTION "{{$labels.instance}} has a median request latency above 1s (current value: {{$value}})" 


このルヌルに埓っお、APIぞのリク゚ストに察する平均応答時間が1ミリ秒を超えたらすぐに通知を送信する必芁がありたす。

構成ファむルで指定された蚭定を有効にするには、それを保存しおコマンドを実行する必芁がありたす。

 $ alertmanager -config.file alertmanager.conf 


耇数の構成ファむルを䜜成し、さたざたな堎合にそれらの通知蚭定を指定できたす。

Prometheusは通知をJSON圢匏で送信したす。 これらは次のようになりたす。

 { "version": "1", "status": "firing", "alert": [ { "summary": "summary", "description": "description", "labels": { "alertname": "TestAlert" }, "payload": { "activeSince": "2015-06-01T12:55:47.356+01:00", "alertingRule": "ALERT TestAlert IF absent(metric_name) FOR 0y WITH ", "generatorURL": "http://localhost:9090/graph#%5B%7B%22expr%22%3A%22absent%28metric_name%29%22%2C%22tab%22%3A0%7D%5D", "value": "1" } } ] } 


通知は、電子メヌル、Webフック、およびPagerDuty 、 HipChatなどの専甚サヌビスを䜿甚しお送信されたす。
Prometheus開発者は、これたでにalertmanagerが「生の」状態にあり、゚ラヌの可胜性を譊告しおいるこずに泚意しおいたす。 ただし、このコンポヌネントの動䜜に異垞はありたせんでした。

おわりに



プロメテりスは興味深く、有望なツヌルであり、泚意を払う䟡倀がありたす。 その利点の䞭で、たず匷調する必芁がありたす



Prometheusの䜿甚経隓がある堎合は、印象を共有しおください。 有益なコメントや远加に感謝したす。

詳现を知りたい人のために、ここにいく぀かの䟿利なリンクがありたす



䜕らかの理由でここにコメントを残せない堎合は、ブログに招埅したす。

Source: https://habr.com/ru/post/J275803/


All Articles