今回は
3Dプリンターの状況をoctoprint経由して時系列DBで監視します。その内容をgrafanaを使って派手なダッシュボードで可視化します。
準備
3Dプリンターに接続されているpi3bにてnode exporterを動かします。参考リンク[1^]のpluginをoctoprintにインストールして再起動します。
構成と接続
3Dプリンター、octoprintが動いているpi3b、時系列DBと可視化するためのpi4bを使います。全体的な接続は図のようになります。
設定等の確認
pluginのexporterは動いているのか
octopi pluginのexporterが動いているかは、URIをたたいてみるとわかります。データが表示されるかどうか確認します。ブラウザーでこちらをたたいてみます。
1
| http://octopi.local/plugin/prometheus_exporter/metrics
|
このように各種値がmetricsとして表示されます。
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
| # HELP octoprint_temperatures_actual Reported temperatures
# TYPE octoprint_temperatures_actual gauge
octoprint_temperatures_actual{identifier="B"} 23.75
octoprint_temperatures_actual{identifier="T0"} 23.83
# HELP octoprint_temperatures_target Targeted temperatures
# TYPE octoprint_temperatures_target gauge
octoprint_temperatures_target{identifier="B"} 0.0
octoprint_temperatures_target{identifier="T0"} 0.0
# HELP octoprint_raspberry_core_temperature Core temperature of Raspberry Pi
# TYPE octoprint_raspberry_core_temperature gauge
octoprint_raspberry_core_temperature 0.0
# HELP octoprint_infos_info Octoprint host informations
# TYPE octoprint_infos_info gauge
octoprint_infos_info{app_start="1631011041",host="octopi",octoprint_version="1.6.1",platform="Linux"} 1.0
# HELP octoprint_client_num The number of connected clients
# TYPE octoprint_client_num gauge
octoprint_client_num 1.0
# HELP octoprint_printer_state_info Printer connection info
# TYPE octoprint_printer_state_info gauge
octoprint_printer_state_info{state_id="OPERATIONAL",state_string="Operational"} 1.0
# HELP octoprint_started_prints_total Started print jobs
# TYPE octoprint_started_prints_total counter
octoprint_started_prints_total 0.0
# HELP octoprint_started_prints_created Started print jobs
# TYPE octoprint_started_prints_created gauge
octoprint_started_prints_created 1.6310110257599866e+09
# HELP octoprint_failed_prints_total Failed print jobs
# TYPE octoprint_failed_prints_total counter
octoprint_failed_prints_total 0.0
# HELP octoprint_failed_prints_created Failed print jobs
# TYPE octoprint_failed_prints_created gauge
octoprint_failed_prints_created 1.63101102576006e+09
# HELP octoprint_done_prints_total Done print jobs
# TYPE octoprint_done_prints_total counter
octoprint_done_prints_total 0.0
# HELP octoprint_done_prints_created Done print jobs
# TYPE octoprint_done_prints_created gauge
octoprint_done_prints_created 1.6310110257601268e+09
# HELP octoprint_cancelled_prints_total Cancelled print jobs
# TYPE octoprint_cancelled_prints_total counter
octoprint_cancelled_prints_total 0.0
# HELP octoprint_cancelled_prints_created Cancelled print jobs
# TYPE octoprint_cancelled_prints_created gauge
octoprint_cancelled_prints_created 1.6310110257601933e+09
# HELP octoprint_captured_timelapses_total Timelapse captured
# TYPE octoprint_captured_timelapses_total counter
octoprint_captured_timelapses_total 0.0
# HELP octoprint_captured_timelapses_created Timelapse captured
# TYPE octoprint_captured_timelapses_created gauge
octoprint_captured_timelapses_created 1.631011025760261e+09
# HELP octoprint_print_progress Print progress
# TYPE octoprint_print_progress gauge
# HELP octoprint_print_time_elapsed Print time elapsed
# TYPE octoprint_print_time_elapsed gauge
# HELP octoprint_print_time_est Print time estimate
# TYPE octoprint_print_time_est gauge
# HELP octoprint_print_time_left_estimate Print time left estimate
# TYPE octoprint_print_time_left_estimate gauge
# HELP octoprint_slice_progress Slice progress
# TYPE octoprint_slice_progress gauge
# HELP octoprint_printing_time_total Printing time total
# TYPE octoprint_printing_time_total counter
octoprint_printing_time_total 0.0
# HELP octoprint_printing_time_created Printing time total
# TYPE octoprint_printing_time_created gauge
octoprint_printing_time_created 1.631011025761908e+09
# HELP octoprint_extrusion_total Filament extruded total
# TYPE octoprint_extrusion_total counter
octoprint_extrusion_total 0.0
# HELP octoprint_extrusion_created Filament extruded total
# TYPE octoprint_extrusion_created gauge
octoprint_extrusion_created 1.6310110257619894e+09
# HELP octoprint_extrusion_print Filament extruded this print
# TYPE octoprint_extrusion_print gauge
octoprint_extrusion_print 0.0
# HELP octoprint_x_travel_total X axis travel total
# TYPE octoprint_x_travel_total counter
octoprint_x_travel_total 0.0
# HELP octoprint_x_travel_created X axis travel total
# TYPE octoprint_x_travel_created gauge
octoprint_x_travel_created 1.6310110257621343e+09
# HELP octoprint_x_travel_print X axis travel in this print
# TYPE octoprint_x_travel_print gauge
octoprint_x_travel_print 0.0
# HELP octoprint_y_travel_total Y axis travel total
# TYPE octoprint_y_travel_total counter
octoprint_y_travel_total 0.0
# HELP octoprint_y_travel_created Y axis travel total
# TYPE octoprint_y_travel_created gauge
octoprint_y_travel_created 1.6310110257623897e+09
# HELP octoprint_y_travel_print Y axis travel in this print
# TYPE octoprint_y_travel_print gauge
octoprint_y_travel_print 0.0
# HELP octoprint_z_travel_total Z axis travel total
# TYPE octoprint_z_travel_total counter
octoprint_z_travel_total 0.0
# HELP octoprint_z_travel_created Z axis travel total
# TYPE octoprint_z_travel_created gauge
octoprint_z_travel_created 1.631011025762542e+09
# HELP octoprint_z_travel_print Z axis travel in this print
# TYPE octoprint_z_travel_print gauge
octoprint_z_travel_print 0.0
# HELP octoprint_print_fan_speed Fan speed
# TYPE octoprint_print_fan_speed gauge
octoprint_print_fan_speed 0.0
|
時系列DBにpullする
exporterの値を時系列DBへ取り込むためprometheus.ymlに以下を追加します。ブラウザーからmetric読めるのでapikeyは不要と思ってましたが、この行がないと403 forbiddenで引っ張れません。これがわかるまで2h。作者のReadme.mdは隅々までよく読みましょう。ちゃんと書いてありました。
1
2
3
4
5
6
7
| - job_name: "octoprint"
scrape_interval: 5s
metrics_path: "/plugin/prometheus_exporter/metrics"
params:
apikey: ['__octprint_api key___']
static_configs:
- targets: ["IP_address:80"]
|
prometheusにデータが入っているのかを確認
prometheusの画面上タブから「Status→Target」を選択すると、prometheus.ymlに書いたscrape設定が機能しているか確認できます。
このようにstat欄がupになっていると問題なくデータをpullできています。downだと右端にエラーの細部が表示されます。ネットワーク的にたどり着いてないとか、403 Forbiddenとか。内部環境によってそれに応じた問題解決が必要です。
grafanaを設定する
prometheusにデータが蓄えられているところまで確認できると、次はgrafanaの設定です。参考リンクにダッシュボードのサンプルjsonファイルがあったので、importしました。
時系列DB内には、他の値も蓄積されているのでチマチマとダッシュボードをカスタマイズします。pi3b内のcore tempの値を引っ張ってきているのですが「0」のままなので原因探求。
pi3bのユーザpiがsudoグループに入ってなかったのでvcgencmdでcore tempデータを引っ張ってこれなかったようです。
派手なダッシュボード完成
OSSの組合せでこのような監視環境ができました。
左上の印刷キャンセルした値がおかしいですが、追々修正します。octoprintでは、ベッドとノズル温度変化しか可視化されませんが、以下の項目を可視化する事ができました。
- プリンターの稼働状況
- 印刷した数
- 印刷失敗した数
- 印刷キャンセルした数
- octoprintが動いているpi3bのcore temp
- 各軸の移動距離
- フィラメントを出すエクストルーダーの移動距離
- 造形物冷却ファンの稼働状況
これらの可視化により、失敗のない印刷に繋がればと思います。
まとめ
3Dプリンターに接続しているpi3bで動かしているoctoprintにpluginを追加しました。時系列DBや可視化ソフトウェアを使って、3Dプリンターの内部情報をダッシュボード上に可視化しました。印刷パラメーターを調整し、造形物の形によらず、失敗の少ない印刷環境が構築できればと思います。
参考リンク
[1^]:Prometheus Exporter