infra_5ch

infra@5ch:telegraf+influxdb+grafana

May 10th, 2020
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.38 KB | None | 0 0
  1. 前提の話ですが、rasberry piを使用する場合、そのまま利用するとmicroSDにリソース情報を書き込むため寿命を縮めます。
  2. 事前にSSDやHDDなどの外付けに保存するようご注意ください。
  3. それぞれのconfを書き換えても良いですが、手っ取り早く /var を外付けに保存していることを前提に書いています。
  4.  
  5. ```
  6. $ sudo apt install apt-transport-https
  7. $ curl https://repos.influxdata.com/influxdb.key | sudo apt-key add -
  8. $ curl https://packages.grafana.com/gpg.key | sudo apt-key add -
  9. $ source /etc/lsb-release
  10. $ sudo curl “deb https://repos.influxdata.com/${DISTRIB_ID,,} ${DISTRIB_CODENAME} stable” | sudo tee /etc/apt/sources.list.d/influxdb.list
  11. $ sudo add-apt-repository “deb https://packages.grafana.com/oss/deb stable main”
  12. $ sudo apt update && sudo apt install influxdb telegraf grafana jq
  13. $ sudo systemctl enable grafana-server
  14. ```
  15.  
  16. grafanaだけサービスがdisableでしたのでインストール直後にサービスをenableに変更しています。
  17.  
  18. `/etc/telegraf/telegraf.conf` のショート版設定内容です
  19. 編集前にバックアップいただき、どういう値が取れるかも参考にいただいた方が良いと思います。
  20.  
  21. `sudo cp /etc/telegraf/telegraf.conf /etc/telegraf/telegraf.conf.bak`
  22.  
  23. 以下は普通に `sudo vim /etc/telegraf/telegraf.conf` です。
  24.  
  25. ```
  26. [global_tags]
  27. [agent]
  28. interval = "60s"
  29. round_interval = true
  30. metric_batch_size = 1000
  31. metric_buffer_limit = 10000
  32. collection_jitter = "0s"
  33. flush_interval = "60s"
  34. flush_jitter = "0s"
  35. precision = ""
  36. hostname = ""
  37. omit_hostname = false
  38. [[outputs.influxdb]]
  39. [[inputs.cpu]]
  40. percpu = true
  41. totalcpu = true
  42. collect_cpu_time = false
  43. report_active = false
  44. [[inputs.disk]]
  45. mount_points = ["/","/var","/var/swap"]
  46. ignore_fs = ["tmpfs", "devtmpfs", "devfs", "iso9660", "overlay", "aufs", "squashfs"]
  47. [[inputs.io]]
  48. [[inputs.diskio]]
  49. [[inputs.kernel]]
  50. [[inputs.mem]]
  51. [[inputs.processes]]
  52. [[inputs.swap]]
  53. [[inputs.system]]
  54. [[inputs.net]]
  55. interfaces = ["eth0","wlan0"]
  56. [[inputs.netstat]]
  57. [[inputs.systemd_units]]
  58. unittype = "service"
  59. [[inputs.wireless]]
  60. host_proc = "/proc"
  61.  
  62. # ここからはカスタムデータ
  63. # CPU温度をinfluxdbに投入する
  64. [[inputs.exec]]
  65. commands = [ "sh /usr/local/bin/therm.sh" ]
  66. name_override = "cpu_frequency"
  67. data_format = "value"
  68. data_type = "float"
  69.  
  70. # boincのCSVを作成するコマンドとcsvをinfluxdbに投入する
  71. [[inputs.exec]]
  72. commands = [ "sh /usr/local/bin/boinc-task.sh" ]
  73.  
  74. [[inputs.file]]
  75. files = ["/var/tmp/boinc-task.json"]
  76. name_override = "boinc_task_state"
  77. data_format = "json"
  78. tag_keys = ["name"]
  79. json_string_fields = ["name","ready to report","state","scheduler state","active_task_state","fraction done"]
  80. ```
  81.  
  82. /usr/local/binに配置したファイルの中身です。
  83.  
  84. cat /usr/local/bin/therm.sh
  85. ```
  86. #!/bin/sh
  87. echo "scale=3; `cat /sys/class/thermal/thermal_zone0/temp`/1000" | /usr/bin/bc
  88. ```
  89.  
  90. cat /usr/local/bin/boinc-task.sh
  91. ```
  92. #!/bin/sh
  93. /usr/bin/boinccmd --get_tasks > /var/tmp/tasks.txt
  94. grep -v "=" /var/tmp/tasks.txt | sed -e "s/^[0-9].*-$/\[SOL\]/g" | sed -e "s/\ \ \ //g" | grep -e "\[SOL\]" -e "^name" -e "^ready" -e "^state" -e "^scheduler" -e "^active" -e "^fraction" | xargs | sed -e "s/\ \[SOL\]\ /\n/g" | sed -e "s/^\[SOL\]\ //g" | grep -e "name" | sed -e "s/: /,/g" | sed -e "s/\(\ ready\ to\ report\)/,\1/g" | sed -e "s/\(\ scheduler\ state\)/,\1/g" | sed -e "s/\(\ state\)/,\1/" | sed -e "s/\(\ active_task_state\)/,\1/g" | sed -e "s/\(\ fraction\ done\)/,\1/g" | jq -s -R 'split("\n") | map(split(",")) | map({"name": .[1],"ready to report": .[3],"state": .[5],"scheduler state": .[7],"active_task_state": .[9],"fraction done": .[11]})' | jq ' .[] | select( .name != null ) | del( .[]|nulls)' | sed -e "s/\"\([0-9].*\.[0-9].*\)\"/\1/g" > /var/tmp/pre_boinc-task.json
  95. cat /var/tmp/pre_boinc-task.json | sed -e "s/\}/\},/g" | sed -e "$ s/\},/\}/g" | sed -e "s/^/\ \ /g" | sed -e "1i \[" | sed -e "$ a \]" > /var/tmp/boinc-task.json
  96. ```
  97.  
  98. telegrafの設定が終わったらサービスをreloadです
  99.  
  100. `sudo systemctl reload telegraf`
  101.  
  102. grafanaはサービスが停止しているのでサービス起動から実施で
  103.  
  104. `sudo systemctl start grafana-server`
  105.  
  106. grafanaは設定ファイルがなく、WebGUIから操作します。
  107. http://localhost or Private IP:3000/ でアクセスします。
  108.  
  109. ログイン画面が表示されますので以下のユーザでログインし、パスワード変更します。
  110.  
  111. ユーザ名 / パスワード
  112. admin / admin
  113.  
  114. ログインしたらサイドメニューに + ボタンがあるので押すとDashboardのimport画面になります。
  115. テンプレートにするdashboardのIDを入力するか、生のjsonをimportします。
  116.  
  117. おすすめのdashboad IDは5955で、以下にjsonファイル一緒にまとめます。
  118. また5955をcustomしたdashboardも記載しますが、custom版はboincのタスク進捗状況やCPU温度を表示するようカスタマイズされていますので参考にご覧ください。
  119.  
  120. - original: Telegraf - system metrics
  121. https://grafana.com/api/dashboards/5955
  122.  
  123. - custom: Telegraf - system metrics
  124. https://pastebin.com/qX4tm1Mm
  125.  
  126. オリジナル版を使用する場合は表示されたダッシュボードでほとんど N/AやNoneだと思いますので、各項目を編集できるため編集します。
  127. SQLみたいにselect文が書かれているのですが、このselect文がinfluxdbから取得しているselect文になっています。
  128. カスタム版はboincのタスク進捗状況やCPU温度がN/Aやアイテムがカスタムされているためデータが取れていないはずです。
  129.  
  130. 変更前
  131.  
  132. ```
  133. WHERE ("host" =~ /^$server$/)
  134. ```
  135.  
  136. 変更後
  137.  
  138. ```
  139. WHERE ("host" =~ /$server$/)
  140. ```
  141.  
  142. おかしいのはWHERE句の$server$の前にある ^ が不要で、これがあることでN/AやNone表示になっています。
  143. うまく取得できればリアルタイムで表示されます。
  144.  
  145. telegrafとinfluxdbとgrafanaはうまく活用すると株価、外貨の変動チェックなどにも利用できます(w
  146. Good luck.
  147.  
  148. 参考にしたURL
  149. ttps://docs.influxdata.com/telegraf/v1.14/introduction/installation/
  150. ttps://grafana.com/docs/grafana/latest/installation/
  151. ttps://goozenlab.com/blog/2019/08/telegraf-pi-install/
Add Comment
Please, Sign In to add comment