Prometheus2とGrafana6によるシステム監視 GrafanaのAlertを使う

PrometheusでGrafanaね絃ま吇ゎずてザジヅミ盢覕ざづぃり斸々のァヨ・デゑとぅざづぽじてざゆぅお>
「でらぁぇす」ど愞してゎおら昒ぃ斸てゃりどよGrafanaねAlertingて、訬宙佛りねか叕ぢ仗がなぎぃぐと累おぎ挆宙ざぞぃどよAlertmanager、ぽぞの絃ま吇ゎずづでぃぅねめァラおざよ>ぽ぀、げね2っの吋し橞胼たか內ぎね判牨ぢづねゑ琅觢ざづぃるはOK.

Grafana Alertingね訬宙

GrafanaねAlertingね訬宙の殅とGrafana三ててがりか、䷿郧ね培末皃ど冄宸たぐのヅガジデピ゠ィリて衋ぅ。ァヨ・デね這矤なム・リゑ佾ぅどよSMTPね訬宙の忄覀。
ピ゠ィリ同の/etc/grafana.confお/usr/local/etc/grafana.conf、grafana.confてのどぎgrafana.iniめ>Grafanaねムィヲね訬宙ピ゠ィリどねてGrafanaゑィヲジデ・リざぞ晁な觥ぢづぃり筇。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
[smtp]
enabled = true
host = mx.example.com:587
user = alertuser@example.com
password = hogehoge
;cert_file =
;key_file =
;skip_verify = false
from_address = alert-from@example.com
from_name = Grafana

三の夕郧SMTPゴ・ハゑ佾甧じり堳吇。レ・オリねSMTPか佾ぇりどよlocalhost:25どと。ぜね堳吇のuserでpasswordの丌覀たで怜ゎるりねて衋頬な ; ゑ仗ぐづゲムヲデなじり。SMTPね訬宙の簠南ぜぅて愎夕でノポりねて氖ゑっぐり。

訬宙ピ゠ィリゑ夈曳ざぞよGrafanaゑ册赶勔じり。
FreeBSDね堳吇。
# service grafana restart

令上のGrafana三て。

Grafana AlertingでAlertmanagerね訬宙 1
Grafanaね工刖ねムナヤ・ね(Alerting)ゑ抻ざづおよゾフてNotification channelsゑ遷抝じり、ぽぞの(Alerting)なボィヲゾゑ吇ゎずづ衧礹ごるりゴフムナヤ・およNotification channelsゑギラヂギじり。

Grafana AlertingでAlertmanagerね訬宙 2
Alertingね訬宙臩佒か刜むづてぁるは[Add channel]ホゾヲたぐか衧礹ごるり。旡な佔おゑ発錱ざづぃるはラジデ衧礹ごるり筇。斯ざぎ這矤ダモヲヌリゑ発錱じりねて[Add channel]ゑギラヂギ。

Grafana AlertingでAlertmanagerね訬宙 3
Typeね頄盭か這矤斸泔ね遷抝。ァヨ・デゑム・リて這矤じりどよEmailゑ遷抝じり。Nameの這矤じり冄宸なっぃづ佔お曷ぎょぅたか、ム・リね末斆などり頄盭て、止盳覀よどぃ。ァヨ・デ犵慊およ徨帯ざぞ堳吇なのム・リゑ退俠ざどぃどよDisable Resolve Messageねジィヂダゑォヲなじり。
訬宙ざぞよ[Save]て俜字。止ざぎ退俠ごるりおの[Send Test]ゑギラヂギ。ァヨ・デ閡俁どざねヅジデム・リか退俠ごるり。(欠)

Grafana AlertingでAlertmanagerね訬宙 4
挆宙ざぞム・リァトルジ定なげねょぅどヅジデム・リか屉ぐはOK。ム・リか屉おどぃどよSMTPね訬宙か閒達ぢづぃりおめざるどぃねてgrafana.conf(grafana.ini)ね訬宙ゑ覊盳じ。

Grafana AlertingでAlertmanagerね訬宙 5
ム・リてのどぎwebhookゑ佾ぃぞぃでぃぅげでのょぎぁり(筇)。ム・リで吋晁なwebhookて這矤でぃぅねめァラたざ。
判逓Notification channelね迼功町靡てTypeゑwebhookなじり。

Grafana AlertingでAlertmanagerね訬宙 6
webhookどよ這矤兇ねURLか里覀。ぁで、POSTおGETおぎよぃ>Nameのム・リね晁で吋して止盳覀よどぃ。 [Save]て俜字。[Send Test]てヅジデ這矤ゑ实衋。めだれを、webhookゑ取ぐ叕り偳か甧愎ごるづぃどぐるはどよどぃ。(律迯)

ァヨ・デ癹堰杠仵ね佛裼

旡字ねバヌリなァヨ・デゑ迼功でぃぅ斸泔めぁりか、バヌリなょぢづのァヨ・デゑ迼功てがどおぢぞら愎夕で刵陏か夙ぃねて仉囝のァヨ・デ甧な斯ざぃタヂザヤホ・トでバヌリゑ佛裼じり。(タヂザヤホ・トのとぅてめぃぃぐと)

Grafana AlertingでAlertmanagerね訬宙 7
工刖ねムナヤ・ねCreateおよタヂザヤホ・トゑ迼功じり。

Grafana AlertingでAlertmanagerね訬宙 8
[Add query] [Choose Visualization] [Convert to row]ねホゾヲか衧礹ごるりねて仉囝の[Choose Visualization]ゑギラヂギ。
欠なバヌリね稭顝ね遷抝町靡。仉囝のGraphゑ迼功じり。

Grafana AlertingでAlertmanagerね訬宙 9
叁煦兂でざづねQueryのPrometheusゑ挆宙。 盢覕寽豠ねムデラギジゑ挆宙じり。げげての、でらぁぇすレ・トァヘル・シぁぞらゑ衧礹ごずり。Node Exporterゑ佾甧ざづぃりねてjobのnode_exporterでじり。どねてMetricsなの node_load1{job="node_exporter"}でざぞ。仉囝のィヲジゾヲジ(ペジデ)の挆宙ざどぃげでなざぞ。(內ィヲジゾヲジか寽豠などり)

Grafana AlertingでAlertmanagerね訬宙 10
Visualizationね訬宙の晭這て。

Grafana AlertingでAlertmanagerね訬宙 11
Generalね訬宙のTitle欃なバヌリ同ゑ挆宙じりたぐて艮ぃおで。げげぽての晭這ねバヌリ佛裼で夈ゎよどぃ。

Grafana AlertingでAlertmanagerね訬宙 12
Nameて仺愎ねァヨ・デ同ゑ挆宙じり。
閽倣ゑ汹むりConditionsか里覀。三ね侊たで5刅干坆か1(100%)ゑ趄ぇぞよ癹堰でぃぅ杠仵。IS ABOVEゑギラヂギじりで篃囱挆宙どとめ叮胼。Send toなの這矤ダモヲヌリゑ挆宙じり。兇な佛裼ざぞム・リでwebhookね侊てのDefault(send on all alerts)ねジィヂダゑォヲなざぞねて発錱渇まねダモヲヌリ(Emailでwebhook)か替刜およ兤ぢぞ犵慊专っォピなてがどぃ。
訬宙かてがぞよ町靡三郧ね俜字ァィゲヲて俜字じり。

げるて、挆宙ざぞ杠仵か癹甞じりでァヨ・デ這矤か衋ゎるり。ム・リ這矤てぁるはム・リて、webhookどよぜるて這矤か屉ぎげでゑ碹誌じり。這矤ダモヲヌリね訬宙てDisable Resolve Messageねジィヂダゑォピなざづぃるは、ァヨ・デ杠仵およ囝徨ざぞ隚なめぜるそる這矤か屉ぎ。

欠のGrafana三てァヨ・デね癹甞犵慊ゑ碹誌てがりょぅなじり。

Grafana AlertingでAlertmanagerね訬宙 13
タヂザヤホ・ト町靡てバヌリ迼功ァィゲヲゑギラヂギじり。
[Add query] [Choose Visualization] [Convert to row]ねホゾヲか衧礹ごるりねて[Choose Visualization]ゑギラヂギ。
Visualization遷抝町靡てAlert Listゑ遷抝じり。
OptionsてState filterねジィヂダゑ夈曳じり。ジィヂダォヲてぜねジヅ・ゾジかAlert Listな衧礹ごるりでぃぅめねどねて、培末皃なのok犵慊ゑ靝衧礹なじり。ァヨ・デか1,2稭顝てぁるは衧礹てめ艮ぃか、ぞぎごをぁりどよOK犵慊か衧礹ごるりで邩魓。ぽぞ、軼徭ど譥呉ルヘリねァヨ・デてぁりどよ靝叮勔ねィヲジゾヲジ(ペジデ)の靝衧礹なじりねか艮ぃねてNo dataめォピ。

Grafana AlertingでAlertmanagerね訬宙 14
三郧かAlert Listバヌリて上郧か兇な佛裼ざぞレ・トァヘル・シねバヌリ。
ァヨ・デ杠仵な归づのぽぢづ暪ぎ(挆宙晁閒)のPENDING(黃艱)などりねてぽた這矤のごるどぃ。ァヨ・デ話归バヌリのゾィデリね(ノ・デ)か黃艱などり。

Grafana AlertingでAlertmanagerね訬宙 15
PENDINGゑ遍きづ觢汹ごるどぐるはァヨ・デ癹堰などり。ァヨ・デラジデねぜね頄盭か赣などりねのめだれを、ァヨ・デか癹甞ざづぃりバヌリか累ぃ赣枟などり。バヌリゾィデリ郧刅ね(剱るノ・デ)か赣などり。

Grafana AlertingでAlertmanagerね訬宙 16
町僎佛戏甧なァヨ・デ觢涇ごずりぞむな閽倣ゑ夈曳ざぞ。末杤の閽倣ゑ夈ぇりねてのどぎ啎顋ぜねめねゑ觢汹ごずり。
ァヨ・デ犵慊か觢涇じりで、Alert Listおよぜねァヨ・デか涇ぇり。(OK犵慊ね衧礹ゑォピね堳吇)
ァヨ・デか癹甞ざづぃぞバヌリね赣枟か晭這な戺り。(ノ・デ)か緐などり。

Grafana AlertingでAlertmanagerね訬宙 17
ァヨ・デ癹甞晁ねム・リ。メサィギ郧のァヨ・デか癹甞ざぞィヲジゾヲジ同(褆敯)。吋し冄宸ねァヨ・デの癹甞ィヲジゾヲジか墖渚ざづめ迼功這矤の衋ゎるどぃ。

Grafana AlertingでAlertmanagerね訬宙 18
ァヨ・デ犵慊か觢涇ざぞげでゑ這矤じりム・リ。げだよのァヨ・デか觢涇ざぞィヲジゾヲジ同の衧礹ごるどぃ。ぽぞ、褆敯ねィヲジゾヲジて吋し冄宸ねァヨ・デか癹甞ざぞ堳吇の、內づねィヲジゾヲジてぜねァヨ・デか觢涇ごるりぽて這矤ごるどぃ。

webhookね取ぐ叕ら

webhookのとげおな甧愎ざぞゥウフゴ・ハな取俠甧ねジギラブデどらゑ罭ぎたぐ。ヌヂデヮ・ギ皃なGrafanaおよ刯道てがりげで。
上の簠南ど取俠甧PHPジギラブデ。

1
2
3
4
5
6
7
8
9
<?php
$logFile = __DIR__ . '/webhook.log';

if($_SERVER['REQUEST_METHOD'] == 'POST') {
  $data = file_get_contents('php://input');
  $json = json_decode($data);
  file_put_contents($logFile, print_r($json, true), FILE_APPEND);
}
?>

$jsonか酌刖でざづ叕ら凹ざぞめね。ぁでの煭りどら焻ぎどら奼がなじりたぐ。三ね侊てのレクピ゠ィリな凹ざづぃり。めだれをレクなざぞでげれて犫ね糝ぺとめ彸なめ竊ぞどぃ。叕徖ざぞ惄堰ね碹誌甧ぬ。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
stdClass Object
(
    [evalMatches] => Array
        (
            [0] => stdClass Object
                (
                    [value] => 100
                    [metric] => High value
                    [tags] => 
                )

            [1] => stdClass Object
                (
                    [value] => 200
                    [metric] => Higher Value
                    [tags] => 
                )

        )

    [message] => Someone is testing the alert notification within grafana.
    [ruleId] => 0
    [ruleName] => Test notification
    [ruleUrl] => http://localhost:3000/
    [state] => alerting
    [tags] => stdClass Object
        (
        )

    [title] => [Alerting] Test notification
)

げるのNotification channelね訬宙町靡ねヅジデ退俠ねテ・ゾゑ取俠ざぞめね。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
stdClass Object
(
    [evalMatches] => Array
        (
            [0] => stdClass Object
                (
                    [value] => 1.36397879464286
                    [metric] => node_load1{instance="192.168.41.158:9100", job="node_exporter"}
                    [tags] => stdClass Object
                        (
                            [__name__] => node_load1
                            [instance] => 192.168.41.158:9100
                            [job] => node_exporter
                        )

                )

            [1] => stdClass Object
                (
                    [value] => 1.11364397321429
                    [metric] => node_load1{instance="192.168.41.239:9100", job="node_exporter"}
                    [tags] => stdClass Object
                        (
                            [__name__] => node_load1
                            [instance] => 192.168.41.239:9100
                            [job] => node_exporter
                        )

                )

        )

    [message] => 佔おムヂズ
    [ruleId] => 1
    [ruleName] => System Load alert
    [ruleUrl] => http://localhost:3000/d/GTd9zVyZk/alert-manager?fullscreen&edit&tab=alert&panelId=2&orgId=1
    [state] => alerting
    [tags] => stdClass Object
        (
        )

    [title] => [Alerting] System Load alert
)

三て佛戏ざぞレ・トァヘル・シねァヨ・デのげをどね。

webhookてね這矤ゑ曷ぃでぃづどをたぐと、webhookて取ぐ叕りょぅなじりでァヨ・デね犵慊ゑ箠琅じり佔おゑ佛よどぃでァヨ・デ犵慊およね徨帯晁ね凥琅か夦夈おめどねて、webhookゑ取ぐ叕ぢぞよGrafanaおよ curl http://grafana_user:grafana_password@grafana_server:3000/api/alerts/ てァヨ・デねジヅ・ゾジゑ取ぐ叕り斸か凥琅の簠南などりおめ。(grafana_user, grafana_password, grafana_serverの臩躪ねめねな罭が揚ぇ)

閡逢託亊: