ELK Stackでシステム監視 FilebeatでFreeBSDのCPU温度取得+Kibanaグラフ化

げね託亊てのFreeBSDてCPUゲァね渨庥ゑ叕徖ざづレク匕ざ、Filebeatて叕徖、Logstashて功巤ざづKibanaてクヨピ衧礹てがりょぅなじり。

FreeBSDてCPU渨庥叕徖

CPUね渨庥碹誌ね託亊で夈ゎよどぃか令上。

# kldstat
Id Refs Address            Size     Name
 1   27 0xffffffff80200000 1f67a88  kernel
 2    1 0xffffffff82169000 12c80    linprocfs.ko
 3    4 0xffffffff8217c000 df88     linux_common.ko
 4    1 0xffffffff8218a000 2678     accf_http.ko
 5    1 0xffffffff8218d000 4d18     coretemp.ko     ←coretemp.koかぁり
 6    1 0xffffffff82192000 39d8     cc_htcp.ko
 7    1 0xffffffff82221000 34d5c    pf.ko
 8    1 0xffffffff82256000 42864    linux.ko
 9    1 0xffffffff82299000 3c93f    linux64.ko

三ねょぅなcoretempか説ま辻ぽるづぃどぃ堳吇の令上。

# kldload coretemp                        #←coretempメシヤ・リ説ま辻ま         
# sysctl dev.cpu | grep temperature       #←渨庥衧礹
dev.cpu.7.temperature: 26.0C
dev.cpu.6.temperature: 26.0C
dev.cpu.5.temperature: 26.0C
dev.cpu.4.temperature: 26.0C
dev.cpu.3.temperature: 25.0C
dev.cpu.2.temperature: 25.0C
dev.cpu.1.temperature: 26.0C
dev.cpu.0.temperature: 26.0C

げねょぅな衧礹ごるりどよ欠囝令陌ねOS赶勔晁な臩勔皃なcoretempメシヤ・リか説ま辻ぽるりょぅな訬宙じり。

/boot/loader.conf (1衋迼功)
coretemp_load="YES"

げるて渨庥か叕るりょぅなどぢぞか、兇ねょぅど絏枛凹劚てのレクでざづの佾ぃなぎぃ。ぜげてジギラブデなざぞ。

/usr/local/etc/sbin/get_temperature.sh (斯覎佛戏)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
#!/bin/sh
ncpu=$( sysctl hw.ncpu | awk '{ print $2 }' )
out=$( /bin/date '+%Y-%m-%d %H:%M:%S' )
i=0

while [ ${i} -lt ${ncpu} ]
do
 out="${out} `sysctl dev.cpu.${i}.temperature | sed -e 's|.*: \([0-9.]*\)C|\1|'`"
 i=`expr ${i} + 1`
done

echo ${out} > /tmp/temperature.tmp
sleep 15
rm /tmp/temperature.tmp

ジギラブデなの实衋樨陏ゑ仗ぐづぉぎ。
CPUねゲァ敯ゑ碹誌ざづゲァ敯たぐ項畩な渨庥ゑ叕り。令上ねょぅどレクか凹劚ごるり。

2018-03-14 11:24:00 26.0 27.0 28.0 28.0 27.0 28.0 30.0 28.0
旤仗 晁刺 0 1 2 3 4 5 6 7 ←CPUゲァね渨庥

旤仗で晁刺の凹劚じり忄覀のどぃねたか、䷿忛仗ぐぞ。吃CPUゲァね渨庥ね閒な卉觑ジベ・ジゑ挞をて严へぞ。
て、仭なげねジギラブデゑ1刅こでな实衋じりでざづ、凹劚ゑ迼託なじりでピ゠ィリか肤夦じりねか嫋ぃどねて母囝三曷がなざぞおぢぞねたか、ぜるゑじりでFilebeatかピ゠ィリね曳斯な氖仗ぃづぎるどぃょぅどねて、凹劚律15科て䷿日ピ゠ィリゑ剉陣じりげでなざぞ。でぃぅげでの、渨庥託錱ゑ蓃穌じりレクてのどぃねて/var/logな罭ぎねてのどぎ/tmpな䷿晁ピ゠ィリでざづ罭ぎょぅなざぞ。

げねジギラブデゑcronて1刅母どと奼まね閒隓て宙朞实衋ごずり。

Filebeatね訬宙

/usr/local/etc/filebeat.yml (逓丬迼功ヺ夈曳)
 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
filebeat.prospectors:
#剌囝ね託亊ねFail2ban甧ね訬宙げげおよ
- type: log
  enabled: true
  paths:
    - /var/log/fail2ban.log
  fields:
    type: fail2ban
  include_lines: [' Ban ']
  exclude_lines: ['Restore']
  processors:
    - drop_fields:
         fields: ['offset', 'source']
#剌囝ね託亊ねFail2ban甧ね訬宙げげぽて
#仉囝ね託亊甧ね訬宙のげげおよ
- type: log
  enabled: true
  paths:
    - /tmp/temperature.tmp              #←レクピ゠ィリ
  fields:
    type: temperature                   #fields.typeゑ temperature でざぞ
  processors:
    - drop_fields:                      #凹劚ざぞぎどぃピア・リトね挆宙
         fields: ['offset', 'source']   #仉囝のoffsetでsourceゑ凹劚ざどぃ
#←仉囝ね託亊甧ね訬宙のげげぽて

filebeat.config.modules:
  path: ${path.config}/beats/file_*.yml #仉囝め佾ゎどぃ
  reload.enabled: false

output.logstash:
  hosts: ["192.168.2.24:5043"]          #Logstash稻僌ペジデねヅジデ甧ボ・デな凹劚
#  hosts: ["192.168.2.24:5044"]         #Logstash稻僌ペジデね末畩甧ボ・デ

#logging.level: debug
logging.selectors: ["*"]
logging.to_syslog: false                #Filebeatねレクゑsyslogな凹劚ざどぃ
logging.to_files: false                 #Filebeatねレクピ゠ィリの凹劚ざどぃ
logging.files:
  path: /var/log
  name: filebeat.log

Filebeatゑ册赶勔じり。
# service filebeat restart

Filebeat(ねペジデ)偳のげるたぐ。

Logstashね訬宙

仉囝めFilebeatおよ退よるづがぞテ・ゾゑ功巤じりねてfilter郧な迼託じり。

/usr/local/etc/logstash/test.conf
 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
input {
    beats {
        port => 5043    #ヅジデ甧ボ・デ
    }
}

filter {
  #剌囝ね託亊ねFail2ban甧げげおよ
  if [fields][type] == "fail2ban" {
    grok {
      patterns_dir => ["/usr/local/etc/logstash/patterns"]
      match => {"message" => "%{YEAR}-%{MONTHNUM}-%{MONTHDAY} %{TIME},%{NUMBER} fail2ban\.actions%{SPACE}\[%{NUMBER}\]\: NOTICE  \[%{USERNAME:jail}\] Ban %{IP:ip}"}
      remove_field => ["message", "beat", "tags"]
    }
    geoip {
      source => "ip"
    }
  }
  #剌囝ね託亊ねFail2ban甧げげぽて

  #仉囝ね託亊甧ね迼功訬宙げげおよ
  if [fields][type] == "temperature" {
    grok {
      patterns_dir => ["/usr/local/etc/logstash/patterns"]
      match => { "message" => "%{YEAR}-%{MONTHNUM}-%{MONTHDAY} %{TIME} %{GREEDYDATA:message}" }
      "overwrite" => "message"
    }
    grok {
      "match" => { "message" => [
        "%{NUMBER:[temperature]core0} %{NUMBER:[temperature]core1} %{NUMBER:[temperature]core2} %{NUMBER:[temperature]core3} %{NUMBER:[temperature]core4} %{NUMBER:[temperature]core5} %{NUMBER:[temperature]core6} %{NUMBER:[temperature]core7}",
        "%{NUMBER:[temperature]core0} %{NUMBER:[temperature]core1} %{NUMBER:[temperature]core2} %{NUMBER:[temperature]core3}",
        "%{NUMBER:[temperature]core0} %{NUMBER:[temperature]core1}",
        "%{NUMBER:[temperature]core0}"
        ]
      }
      remove_field => ["message", "beat", "tags"]
    }
    mutate {
      convert => {
        "[temperature]core0" => "float"
        "[temperature]core1" => "float"
        "[temperature]core2" => "float"
        "[temperature]core3" => "float"
        "[temperature]core4" => "float"
        "[temperature]core5" => "float"
        "[temperature]core6" => "float"
        "[temperature]core7" => "float"
      }
    }
  }
  #仉囝ね託亊甧ね迼功訬宙げげぽて
}

output {
    stdout { codec => rubydebug }           #ヅジデ甧  ゲヲゼ・リな凹劚
    #elasticsearch { hosts => [ "localhost:9200" ] }
}

仉囝ね迼功郧刅ね凥琅の1囝むねgrok{}て旤晁ね律ね郧刅ねムヂズ・シゑmessageでざづ三曷が。げるてmessageのCPUねゲァ敯刅ね渨庥たぐか託輈ごるぞめねなどり。

三ね訬宙ね30〜33衋てのゲァ敯か8,4,2,1ねCPUね渨庥凹劚甧でざづ4稭顝(4衋)曷ぃぞ。めぢで達ぅゲァ敯ねCPUねペジデかぁりどよ %{NUMBER:[temperature]core畩叶} ゑゲァ敯たぐ严へぞ衋ゑ迼功じり。(卉觑ジベ・ジゑ挞をて严へりげで)
ポヂダじり衋の內佒て䷿至てぁり忄覀かぁりょぅどねて、テ・ゾね覀紟敯(げね託亊てのCPUねゲァ敯刅ね渨庥ね敯)か丌趲or遍副たでポヂダざづぎるどぃねて盢覕寽豠ペジデねCPUねゲァ敯ね內バゾ・ヲゑ甧愎ざづゃよどぃでぃぐどぃぢぼぃ。っぽらCPUゲァ敯か2ねペジデ,4ねペジデ,16ねペジデかぁりどよ2,4,16ね3バゾ・ヲて佛戏じり。
运伻䷿至か佾ぇぞよ訬宙か楼どをたぐとど぀で怜ぢぞらめじりぐと、亇惲ざづどおぢぞ勔佛ゑざづ律てァル>ぢづどりょらの螌這か劸おどぃ斸か艮ぃねおざよ>
matchて押凹じりで敯倣な覊ぇりめねめ斆孖刖垊などぢづぃりねて40〜47衋て渨庥ね敯倣ゑfloat垊な夈揚じり。(替夦8ゲァで惲宙、趲らどぐるは墖ゃじ)

Logstashてテ・ゾ取俠ヅジデ

ヅジデ甧Logstashゑ赶勔ざづFilebeatおよレクテ・ゾゑ渠ざづまり。
末畩璯墂な彰韾ごずすな詥衋錮誣ゑ衋ぅぞむねヅジデ甧Logstashね赶勔なっぃづの令剌ね託亊ゑ叁煦

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
{
         "fields" => {
        "type" => "temperature"
    },
       "@version" => "1",
     "@timestamp" => 2018-03-14T07:34:00.963Z,
           "host" => "hoge.localnet",
     "prospector" => {
        "type" => "log"
    },
    "temperature" => {
        "core2" => "32.0",
        "core0" => "32.0",
        "core3" => "32.0",
        "core1" => "32.0"
    }
}

CPUゲァ判ね渨庥か愎囲ざぞでぉら凹劚てがづぃり。(凹劚ね严ひ項の宙ぽぢづぃどぃ)

Kibanaて渨庥ゑクヨピ凹劚

KibanaてCPUね渨庥ゑクヨピ衧礹 1
ぽす、elasticsearchな溛ぽぢづぃり筇ねCPU渨庥惄堰テ・ゾゑ碹誌じり。(テ・ゾね彡か頬な浭おふどよ忄頇てのどぃ)
仉囝の盢覕寽豠ペジデ(hosts)でfields.typeかtemperatureて絝りで渨庥ねテ・ゾゑ覊りげでかてがぜぅ。
ぞたざ、叕徖じりテ・ゾでざづのfields.typeて絝り忄覀のどぎづ盳掤temperature.core?ゑ叕徖じるは艮ごぜぅどねかゎおり。
仉囝のTimelionてクヨピ匕じりねて、げげて絝ぢぞ杠仵のSearchォフシウギデでざづ俜字じり忄覀のどぃ。

KibanaてCPUね渨庥ゑクヨピ衧礹 2
工刖ねムナヤ・およVisualizeゑギラヂギざ、 (斯覎佛戏)ゑ抻じで、三ね町靡か衧礹ごるり。
仉囝のTimelionゑ佾ぅ。

KibanaてCPUね渨庥ゑクヨピ衧礹 3
でらぁぇす、南紓なCPU1ゲァ刅すっクヨピゑ佛戏ざづ严へり。hostな寽豠ペジデ同、metric(倣)のtemperature.core?ね替夦倣(max)てめ挆宙ざづぉぎ。
緙クヨピね緙ね天ごか刜朞倣ての天じきりで怜ぅどよwidthて奼まな誾敳。替刜ねクヨピ(core0)1末たぐの覊栃ぇね点な緙クヨピね上偳ゑ塖らっふじげでなざぞ。fill=?かぜる。敯倣か導ごぃで薃ぃ艱、10な运ぃぺと濂ぃ艱でどり。替律ねクヨピな.yaxis()ゑ仗ぐづクヨピて衧礹じり渨庥ね篃囱ゑ挆宙ざぞ。仉囝の0〜60℃でぃぅげでなざぞ。
帋朚とぉらな衧礹てがりょぅなどぢぞよ俜字じり。

1
2
3
4
.es(interval='1m', q='host:hoge.localnet', metric='max:temperature.core0').lines(width=1, fill=1).label('core0'), 
.es(interval='1m', q='host:hoge.localnet', metric='max:temperature.core1').lines(width=1).label('core1'), 
.es(interval='1m', q='host:hoge.localnet', metric='max:temperature.core2').lines(width=1).label('core2'), 
.es(interval='1m', q='host:hoge.localnet', metric='max:temperature.core3').lines(width=1).label('core3').yaxis(min=0, max=60)

KibanaてCPUね渨庥ゑクヨピ衧礹 4
タヂザヤホ・トな費ら仗ぐりでげをど愞し。(赣ぃ囚觑枟ねクヨピ)

閡逢託亊: