Prometheus2とGrafana6によるシステム監視 NTP統計情報の表示

Node ExporterてのNTP惄堰め凹劚てがりでぃぅげでなどぢづぃり。赶勔ォブザユヲて ntp閡俁ね挆宙ゑじりたぐ。
ぞた、げねNTP惄堰の叁煦じり晁刺ゼ・ジゑ覊づぎるどぃまぞぃ。てがぞよNTPゴ・ハね絰訇惄堰てぃぅでげれねpeerstatsゑ叕らぞぃ。
ぽぞ、Node ExporterねNTP惄堰甧ねヅヲブル・デか描侚ごるづぃりか、げだよの叁煦じりペジデね遷抝で衧礹かとぅどぢづぃりねおゎおよどぃ。盢覕寽豠な褆敯可ねNTPゴ・ハかぃづぜるそるNode ExporterてNTP惄堰ゑ凹劚ざぞ堳吇な衧礹か夈どねてとぅ佾ぢづょぃねお艮ぎゎおよどぃ。
ntpdか凹劚じり絰訇惄堰ゑ佾甧じるは、欱ざぃ惄堰の叕るりゎぐどねてぜるゑNode Exporterな渠ざづGrafanaて衧礹じりげでなざぞ。げる、令剌ねElastic Stackねょらめのりおな簠南。

どぉ、フレクね1ベ・シてゃりなのぃれぃれぁら遍きりねて「かでよほ」てのpeerstatsたぐゑ寽豠でじり。

ntpdな絰訇惄堰ゑ凹劚ごずり

/etc/ntp.conf (夈曳 or 5衋挾兤)
1
2
3
4
5
statistics loopstats peerstats clockstats sysstats
statsdir /var/lib/ntp/ntpstats/
filegen peerstats  file peerstats  type day enable
filegen loopstats  file loopstats  type day enable
filegen clockstats file clockstats type day enable

2衋盭の絰訇ピ゠ィリね凹劚兇

げねでが、Linuxねsystemd糺ねザジヅミてのNTPね赶勔訬宙ピ゠ィリな泧愎。privatetempか月劸なごるづぃりで絰訇ピ゠ィリか佔凥な凹劚ごるりねお刣よどぃでぃぅげでめ。/lib/systemd/system/ntp.serviceピ゠ィリねprivatetemp衋ゑ剉陣ざづNTPゴ・ヒジゑ偛歡→焠劸匕→替月劸匕ヺ閊姊じり。(內づねテアジデラヒヤ・ザユヲてげね這らでの陏よどぃおめ)

NTPね册赶勔
#Linuxね堳吇
% sudo service ntp restart

#FreeBSDね堳吇
# service ntpd restart

NTP册赶勔律およ挆宙ざぞテアルギデラな絰訇惄堰ピ゠ィリか凹劚ごるりねて碹誌じり。

NTP絰訇惄堰ゑNTP plotterて衧礹じり
1旤令三絋ぢづ凹劚ごるぞpeerstatsピ゠ィリゑWindowsァブラねNTP plotterて衧礹ざづまぞ。
のぢがら觿ぢづげねァブラの勔佛か遄ぃねてpeerstatsピ゠ィリゑ遷抝ざづおよクヨピか衧礹ごるりぽて晁閒かおおり。ぽ぀げをど愞しねクヨピか衧礹ごるりょぅなざぞぃでぃぅ侊。ぞたざ、クヨピゑ覊るは刣りか、ヌヂデね晁刺ゼ・ジおよPPSぽて內づ1っねクヨピな兤るりねのだゆぢでぬ。ぁで、げね囲てのNMEA(127.127.20.0)かネゲキラね刂ねょぅなどぢづぃりかげるのぉおざぃ。(げねGPSメシヤ・リ1ったぐかげをどクヨピなどりねて倊佒ね畯帷ぢぼぃ)

peerstats絰訇惄堰ゑNode Exporterな渠じ

ピ゠ィリ同の佔てめ艮ぃで怜ぅか/usr/local/bin/get_peerstats.shでぃぅジギラブデゑ佛戏ざぞ。

/usr/local/bin/get_peerstats.sh (斯覎佛戏)
 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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#!/bin/sh

log="/var/lib/ntp/ntpstats/peerstats"
name="node_ntp_peerstats"
outdir="/tmp/node-exporter/"

#NTP Servers
srv1='2001:3a0:0:2001::27'
srv2='2001:3a0:0:2005::57'
srv3='2001:3a0:0:2006::87'

offset1="# HELP node_ntpstats_offset_seconds Time offset in between local system and reference clock."
offset2="# TYPE node_ntpstats_offset_seconds gauge"
delay1="# HELP node_ntpstats_delay_seconds Time delay in between local system and reference clock."
delay2="# TYPE node_ntpstats_delay_seconds gauge"
disps1="# HELP node_ntpstats_dispersion_seconds Time dispersion in between local system and reference clock."
disps2="# TYPE node_ntpstats_dispersion_seconds gauge"
skew1="# HELP node_ntpstats_skew_seconds Time skew in between local system and reference clock."
skew2="# TYPE node_ntpstats_skew_seconds gauge"

pps='127.127.22.0'
ppsdata=`/bin/cat ${log} | /bin/grep ${pps} | /usr/bin/tail -1`
ppsoffset=`echo ${ppsdata} | cut -d " " -f 5`
ppsdelay=`echo ${ppsdata} | cut -d " " -f 6`
ppsdisps=`echo ${ppsdata} | cut -d " " -f 7`
ppsskew=`echo ${ppsdata} | cut -d " " -f 8`
ppsl1="node_ntpstats_offset_seconds{device=\"pps\"} ${ppsoffset}"
ppsl2="node_ntpstats_delay_seconds{device=\"pps\"} ${ppsdelay}"
ppsl3="node_ntpstats_dispersion_seconds{device=\"pps\"} ${ppsdisps}"
ppsl4="node_ntpstats_skew_seconds{device=\"pps\"} ${ppsskew}"

nmea='127.127.20.0'
nmeadata=`/bin/cat ${log} | /bin/grep ${nmea} | /usr/bin/tail -1`
nmeaoffset=`echo ${nmeadata} | cut -d " " -f 5`
nmeadelay=`echo ${nmeadata} | cut -d " " -f 6`
nmeadisps=`echo ${nmeadata} | cut -d " " -f 7`
nmeaskew=`echo ${nmeadata} | cut -d " " -f 8`
nmeal1="node_ntpstats_offset_seconds{device=\"nmea\"} ${nmeaoffset}"
nmeal2="node_ntpstats_delay_seconds{device=\"nmea\"} ${nmeadelay}"
nmeal3="node_ntpstats_dispersion_seconds{device=\"nmea\"} ${nmeadisps}"
nmeal4="node_ntpstats_skew_seconds{device=\"nmea\"} ${nmeaskew}"

srv1data=`/bin/cat ${log} | /bin/grep ${srv1} | /usr/bin/tail -1`
srv1offset=`echo ${srv1data} | cut -d " " -f 5`
srv1delay=`echo ${srv1data} | cut -d " " -f 6`
srv1disps=`echo ${srv1data} | cut -d " " -f 7`
srv1skew=`echo ${srv1data} | cut -d " " -f 8`
srv1l1="node_ntpstats_offset_seconds{device=\"${srv1}\"} ${srv1offset}"
srv1l2="node_ntpstats_delay_seconds{device=\"${srv1}\"} ${srv1delay}"
srv1l3="node_ntpstats_dispersion_seconds{device=\"${srv1}\"} ${srv1disps}"
srv1l4="node_ntpstats_skew_seconds{device=\"${srv1}\"} ${srv1skew}"

srv2data=`/bin/cat ${log} | /bin/grep ${srv2} | /usr/bin/tail -1`
srv2offset=`echo ${srv2data} | cut -d " " -f 5`
srv2delay=`echo ${srv2data} | cut -d " " -f 6`
srv2disps=`echo ${srv2data} | cut -d " " -f 7`
srv2skew=`echo ${srv2data} | cut -d " " -f 8`
srv2l1="node_ntpstats_offset_seconds{device=\"${srv2}\"} ${srv2offset}"
srv2l2="node_ntpstats_delay_seconds{device=\"${srv2}\"} ${srv2delay}"
srv2l3="node_ntpstats_dispersion_seconds{device=\"${srv2}\"} ${srv2disps}"
srv2l4="node_ntpstats_skew_seconds{device=\"${srv2}\"} ${srv2skew}"

srv3data=`/bin/cat ${log} | /bin/grep ${srv3} | /usr/bin/tail -1`
srv3offset=`echo ${srv3data} | cut -d " " -f 5`
srv3delay=`echo ${srv3data} | cut -d " " -f 6`
srv3disps=`echo ${srv3data} | cut -d " " -f 7`
srv3skew=`echo ${srv3data} | cut -d " " -f 8`
srv3l1="node_ntpstats_offset_seconds{device=\"${srv3}\"} ${srv3offset}"
srv3l2="node_ntpstats_delay_seconds{device=\"${srv3}\"} ${srv3delay}"
srv3l3="node_ntpstats_dispersion_seconds{device=\"${srv3}\"} ${srv3disps}"
srv3l4="node_ntpstats_skew_seconds{device=\"${srv3}\"} ${srv3skew}"

echo "${offset1}\n${offset2}\n${ppsl1}\n${nmeal1}\n${srv1l1}\n${srv2l1}\n${srv3l1}\n${delay1}\n${delay2}\n${ppsl2}\n${nmeal2}\n${srv1l2}\n${srv2l2}\n${srv3l2}\n${disps1}\n${disps2}\n${ppsl3}\n${nmeal3}\n${srv1l3}\n${srv2l3}\n${srv3l3}\n${skew1}\n${skew2}\n${ppsl4}\n${nmeal4}\n${srv1l4}\n${srv2l4}\n${srv3l4}" > ${outdir}${name}.prom.$$

/bin/mv ${outdir}${name}.prom.$$ ${outdir}${name}.prom
/bin/chmod 666 ${outdir}${name}.prom

ホ・ヲザウリねジギラブデなざぞねの、BSD/Linuxぺほ內づね璯墂てめ勔ぎおよ。Linuxたで/bin/shね实佒のdashか夙ぃょぅたぐと、啎顋どぎ勔ぎ筇。
夈敯ゑ${夈敯同}彡弎なざづりねの緧雅ねでがなゎおらゃじぃおよ。
ゃぢづりげでの南紓てpeerstatsピ゠ィリおよ吃晁刺ゼ・ジね替斯衋1衋ゑ叕徖ざづ、穹發斆孖て刅剱ざづ盭皃ね敯倣ゑ徖りでぃぅめね。替斯ルゲ・トね晁刺窀吇のホ・ヲザウリたで離ざぎどりねてバジでぃぅィヲダガたぐと、ntpdか勔ぃづぃづ止ざぎ晁刺ゼ・ジおよ惄堰か徖よるづぃり陏らの牸な啎顋どぃ筇。

PPSか焠ぃNTPゴ・ハね堳吇、PPS閡俁ね託迯ゑ內づ涇ざづぎたごぃ。牸な替律运ぎねecho衋ね${pps*}\nゑ內づ。
夕郧ね晁刺叁煦ゴ・ハか2っね堳吇のSRV3閡俁ゑ內づ涇ざづぎたごぃ。牸な替律运ぎねecho衋ね${srv3*}\nゑ內づ。
てどぃで、Node Exporter皃なの丌遨分どテ・ゾか凹劚ごるづざぽぅ。
xBSDての\nなょり攸衋かぉぜよぎ刨甧てがどぃねて\nね仢ゎらな攸衋ざづぎたごぃ。タフリギエ・ヅ・ザユヲね丬て攸衋ざぞよぜるか双星ごるぽじ。ぽぞ、xBSDてのgrepか/bin/grepてのどぎ/usr/bin/grepたで怜ゎるりねて三ねょぅなピリバジ挆宙ね堳吇の覀俭止。
Node Exporterか説ま辻み夕郧ピ゠ィリねテアルギデラのoutdir夈敯て挆宙ざづぃぽじ。
剌囝で吋しどよ /tmp/node-exporter てじ。
FreeBSDねports/pkgてNode Exporterゑィヲジデ・リざづぃり堳吇の夕郧叁煦テアルギデラか /usr/local/etc/rc.d/node_exporter冄て /var/tmp/node_exporter な挆宙ごるづぃりねてジギラブデ4衋盭ねoutdir夈敯ね倣ゑ/var/tmp/node_exporterなざづぎたごぃ。ぽぞの/etc/rc.confて node_exporter_textfile_dir="奼まねdir"衋ゑ迼功ざづぜげて挆宙ざぞテアルギデラなざぽじ。げねょぅなどぢづぃりねて/etc/rc.confねnode_exporter_args衋て --collector.textfile.directory=hoge の挆宙じりでェヨ・などらぽじ。Node Exporterか卲歺じりねて絵寽NGてじ。

实衋屝怦ゑ仗ぐり。
$ sudo chmod +x /usr/local/bin/get_peerstats.sh
/etc/crontab (1衋迼功)
*  *  *  *  *  root    /usr/local/bin/get_peerstats.sh >/dev/null 2>&1

cronて1刅こでな实衋じりょぅなじり。

凹劚冄宸ね碹誌

Node Exporterゑ册赶勔じり忄覀かぁりおの丌昍。「かでよほ」ね丬ね亹の躉躆どぎ册赶勔ざぞねて夕郧ピ゠ィリ迼功晁ね挘勔ゑ碹誌ざづぃどぃ。

http://node_exporterペジデ:9100/metrics ゑ碹誌じり。
凹劚ごるりテ・ゾね佔凥おな令上ねょぅど冄宸か吪ぽるづぃぞよOK

# HELP node_ntpstats_delay_seconds Time delay in between local system and reference clock.
# TYPE node_ntpstats_delay_seconds gauge
node_ntpstats_delay_seconds{device="2001:3a0:0:2001::27"} 0.011966835
node_ntpstats_delay_seconds{device="2001:3a0:0:2005::57"} 0.012230173
node_ntpstats_delay_seconds{device="2001:3a0:0:2006::87"} 0.011432178
node_ntpstats_delay_seconds{device="nmea"} 0
node_ntpstats_delay_seconds{device="pps"} 0
# HELP node_ntpstats_dispersion_seconds Time dispersion in between local system and reference clock.
# TYPE node_ntpstats_dispersion_seconds gauge
node_ntpstats_dispersion_seconds{device="2001:3a0:0:2001::27"} 0.002332928
node_ntpstats_dispersion_seconds{device="2001:3a0:0:2005::57"} 0.00157883
node_ntpstats_dispersion_seconds{device="2001:3a0:0:2006::87"} 0.00320245
node_ntpstats_dispersion_seconds{device="nmea"} 0.000237624
node_ntpstats_dispersion_seconds{device="pps"} 0.000235834
# HELP node_ntpstats_offset_seconds Time offset in between local system and reference clock.
# TYPE node_ntpstats_offset_seconds gauge
node_ntpstats_offset_seconds{device="2001:3a0:0:2001::27"} 0.000939802
node_ntpstats_offset_seconds{device="2001:3a0:0:2005::57"} 0.001022241
node_ntpstats_offset_seconds{device="2001:3a0:0:2006::87"} 0.000583119
node_ntpstats_offset_seconds{device="nmea"} -0.00125271
node_ntpstats_offset_seconds{device="pps"} 1.1725e-05
# HELP node_ntpstats_skew_seconds Time skew in between local system and reference clock.
# TYPE node_ntpstats_skew_seconds gauge
node_ntpstats_skew_seconds{device="2001:3a0:0:2001::27"} 0.000138265
node_ntpstats_skew_seconds{device="2001:3a0:0:2005::57"} 0.000146675
node_ntpstats_skew_seconds{device="2001:3a0:0:2006::87"} 0.000125755
node_ntpstats_skew_seconds{device="nmea"} 0.000134344
node_ntpstats_skew_seconds{device="pps"} 1.3283e-05

Grafanaてクヨピ衧礹

Grafanaね偳の、佔お遨归なタヂザヤホ・トゑ速りお、旡字ねタヂザヤホ・トゑ佾ぅおざづ、ぜげなクヨピゑ迼功ざづギェラ・ゑ曷ぃづ衧礹呧らゑダユィダユィてじく衧礹てがりねてでづめ簠南。
て、Node ExporterねNTPゲルギゾ橞胼て徖ぞ惄堰ゑGrafanaな衧礹じりタヂザヤホ・トかhttps://grafana.com/grafana/dashboards/7496て兤扊てがりか、佾ぢづまぞ陏らての夕郧ね晁刺ゼ・ジでねスルゑ衧礹じりょぅどげでかてがどぃ>POOLたぐ>衧礹ごるり惄堰ね愎呲めだゆぢでょぎゎおよどぃ。ぜめぜめNode Exporterか叕徖じりNTP惄堰でぃぅねか佔ね惄堰どをたおゎおよどぃでぃぅヺヺヺ

仉囝の、斯ざぃタヂザヤホ・トてのどぎ、令剌な紸今ざぞNode Exporter甧ねタヂザヤホ・トNode Exporter Fullなバヌリ(クヨピ)ゑ迼功じり彡なじり。タヂザヤホ・トゑ分ら曾ぇどぎづ渇みでぃぅねか「かでよほ」ね丬ね亹ね奼まどねて。

NTP絰訇惄堰ゑGrafanaて衧礹じり 1
Grafana町靡1:
Grafanaねタヂザヤホ・トゑ佛戏じりお旡字ねタヂザヤホ・トゑ遷抝じりどと、NTP絰訇惄堰ゑ衧礹じりバヌリ(クヨピ)ゑ迼功じりタヂザヤホ・トゑ衧礹ざぞ犵慊なじり。
迼功ホゾヲゑ抻じ。

NTP絰訇惄堰ゑGrafanaて衧礹じり 2
Grafana町靡2:
タヂザヤホ・トね工三な斯ざぃバヌリか迼功ごるり。
ぜねバヌリな衧礹ごるづぃり「Add Query」ゑギラヂギじり。

NTP絰訇惄堰ゑGrafanaて衧礹じり 3
Grafana町靡3:
ギェラ・訬宙町靡か閊ぎねてMetrics欃なギェラ・ゑ曷ぎ。
ギェラ・ゑ曷ぎで培末皃なのラァリゾィミな三ねクヨピ欃なギェラ・な寽忛ざぞクヨピか衧礹ごるり。ぞたざ、实隚なのピエ・オジゑ夈曳じりどとざどぃで曳斯ごるどぃおめ。ぽぞ、ィヲジゾヲジゑ挆宙ざぞ堳吇のぜねテ・ゾか字圧じりペジデゑ遷抝ざづぉおどぃでクヨピ欃なの佔め衧礹ごるどぃ。ィヲジゾヲジゑ挆宙ざどぐるはペジデて絝よるどぃねてクヨピか衧礹ごるりおめざるどぃか、ぜねクヨピの褆敯ねペジデねテ・ゾか淶さぢづぃりおめざるどぃ。
Legendね欃の朩挆宙たでギェラ・な运ぃめねか衧礹ごるり。クヨピね緙か佔ゑ衧礹ざづぃりねお筈ゑ衧礹じりめねどねて侊ぇはテハィジ同どとゑ衧礹じりで艮ぃ筇。(欠)

NTP絰訇惄堰ゑGrafanaて衧礹じり 4
Grafana町靡4:
1っね侊でざづNMEAねOffsetゑ衧礹じりギェラ・。
node_ntpstats_offset_seconds{job=~"$job", device="nmea"} げるてペジデて絝よどぃ犵慊。 node_ntpstats_offset_seconds{instance=~"$node:$port", job=~"$job", device="nmea"} げるて、ペジデて絝よるり犵慊。(三ね町僎ね犵慊)
Legendの仉囝てぁるは、「 {{device}} 」ねょぅな挆宙じり。 げるて寽忛じりテハィジ同か仢兤ごるり。

NTP絰訇惄堰ゑGrafanaて衧礹じり 5
Grafana町靡5:
工およ「クヨピ」(Visualization)ねァィゲヲゑ遷ふ。
Axesね丬ねLeft Yなぁり南佌ね稭顝(Unit)ゑ遷抝じり。仉囝ねpeerstatsの敯倣ね南佌か「科」どねて、ブリタゥヲムナヤ・およ「Time」ゴフ頄盭ゑ遷ひ、ごよな上ね「Seconds(s)」ゑ遷抝じり。

NTP絰訇惄堰ゑGrafanaて衧礹じり 6
Grafana町靡6:
工およ「歮軉*ジバド」(General)ねァィゲヲゑ遷ふ。
「Title」欃なクヨピね同剌ゑ兤劚じり。(仺愎)
ぜげぽてて、碹宙じりどよ替三郧ねFDァィゲヲゑギラヂギざづ俜字じり。ギラヂギじりで、兤劚窒か閊ぎか、ムメね兤劚欃どねて牸な兤劚ざどぎづめ艮ぎづ「Save」ホゾヲゑ抻じ。
どぉ、げね俜字のバヌリ南佒てのどぎタヂザヤホ・ト內佒ね俜字どねて達ぅタヂザヤホ・トゑ衧礹ざょぅでじりぽてな俜字じるは艮ぃ。
ぽぞ、バヌリね佌罭ゑ夈ぇりどと佔よおね夈曳ゑ衋ぢぞよタヂザヤホ・トゑ凹り隚な俜字じりお碹誌ごるり。迁闉ど擌佛の俜字ざどぃ斸か艮ぃ堳吇め夙ぃ。

NTP絰訇惄堰ゑGrafanaて衧礹じり 7
Grafana町靡7:
1っねバヌリな褆敯ねクヨピ(抗る緙ゃハ・筈)ゑ衧礹じり堳吇、褆敯ねギェラ・ゑ迼功じりでぃぅ斸泔かぁら、ぜね堳吇の「Add Query」ホゾヲゑ抻ざづ、判ねギェラ・ゑ発錱じり。
ぽぞの、1っねギェラ・て止覎衧珽ゑ佾ぢづ忄覀どクヨピゑ遷抝衧礹じりげでめてがり。
げね町靡ね侊ての、「テハィジ」て止覎衧珽ゑ佾ぢづ「2001」およ姊ぽりIPv6ァトルジ內づゑ愎呲じり「2001.*」ぽぞの「pps」テハィジゑ衧礹ごずり「(A | B)」でぃぅ彡弎て「(2001.*|pps)」ゑ挆宙。

NTP絰訇惄堰ゑGrafanaて衧礹じり 8
Grafana町靡8:
奼がどたぐバヌリゑ迼功ざづPeerstats閡俁ねクヨピゑ佛ぢぞ。げね町僎のフヨゥサね窒幄ゑ800pxな独むづぃりねて貦盷どクヨピなどぢづぃりか、幄ゑ庂けりでめぅ尐ざ覊こぞぇねぁりクヨピなどり。

閡逢託亊: