3dprinter

3Dプリンターを時系列DBで派手に監視する

3Dプリンターを時系列DBで派手に監視する

今回は

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

comments powered by Disqus