【Grafana Meetup Japan #6】Grafanaをリバプロ配下で動かすときにやること ~ Grafana Liveってなんだ ~
by
よしたけ
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Slide 1
Slide 1 text
Grafanaをリバプロ配下で動かすときにやること ~ Grafana Liveってなんだ ~ 2025/09/02 Grafana Meetup Japan #6 よしたけ @yoshitake945
Slide 2
Slide 2 text
自己紹介 浅野 剛丈(よしたけ) 所属:きいてみてね! コミュニティ: CloudNative Days実行委員 - Zabbix, Grafana, k8s - (勉強中) Prometheus, Loki, Tempo, Mimir, Alloy @yoshitake945 2
Slide 3
Slide 3 text
なんかヌルヌルしてかっこいい! 😄😄😄 Grafanaのすごいところ 3
Slide 4
Slide 4 text
“ そんなヌルヌルを支える機能 Grafana Live 知ってる人?? ✋ 4
Slide 5
Slide 5 text
Grafana Live ● Grafana 8.0 から搭載( 2021年6月) ● リアルタイムストリーミングできる ● WebSocketベースの仕組み 5 https://grafana.com/blog/2021/06/28/new-in-grafana-8.0-streaming-real-time-events-and-data-to-dashboards/
Slide 6
Slide 6 text
WebSocketとは? ● WebSocket: 常時接続で双方向通信 ● HTTP: リクエスト →レスポンス 6 WebSocketでやりとりしたい WebSocketコネクション用意するわ 双方向通信 ここならヌルヌルで きるぜ!! クライアント サーバ
Slide 7
Slide 7 text
WebSocketのHTTPリクエスト 7 // サーバ HTTP/1.1 101 Switching Protocols Upgrade: websocket Connection: Upgrade Sec-WebSocket-Accept: HSmrc0sMlYUkAGm… // クライアント GET /live HTTP/1.1 Host: example.com Upgrade: websocket Connection: Upgrade Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw== Sec-WebSocket-Version: 13 Origin: https://example.com ● クライアント → サーバ:WebSocketへの HTTP Upgradeリクエスト ○ Grafana Liveが必要な場合、ブラウザが自動で書き換える ■ JavaScriptがWebSocket API を実行 ● サーバ → クライアント:101 Switching Protocolsを返す ○ クライアントのSec-WebSocket-Keyを元に計算してSec-WebSocket-Acceptを返す ● 以降はHTTPでなくWebSocketで双方向通信
Slide 8
Slide 8 text
リバースプロキシがある場合どうする? 8 俺はヌルヌル できるのか?? クライアント サーバ リバースプロキシ ❓
Slide 9
Slide 9 text
リバースプロキシを挟むとき リバースプロキシに WebSocketにHTTP Upgradeするよう設定する 9 クライアントの WebSocket 要求を引き継ぐ ここならヌルヌルで きるぜ!! クライアント サーバ リバースプロキシ 双方向通信 クライアントとの wsコネクションを確立する
Slide 10
Slide 10 text
リバプロ側の設定例( nginx) ■ nginx設定のポイント ● map ○ ヘッダの値を制御 ■ default: upgrade ■ <空白>: close ● upstream ○ Grafanaバックエンドの宛先を定義 ● server ○ リバースプロキシで公開するホスト名・ポート ○ location /grafana/ {} ■ 必要ならサブパスを明示 ○ proxy_pass http://grafana/; ■ ※末尾にスラッシュを入れる ○ WebSocketのためHTTP/1.1を使用 ■ Keep-Aliveで接続を維持 ○ UpgradeヘッダとConnectionヘッダをセット ○ Hostヘッダを維持 10 http { map $http_upgrade $connection_upgrade { default upgrade; '' close; } upstream grafana { server 127.0.0.1:3000; } server { listen 80; server_name example.com; location /grafana/ { proxy_pass http://grafana/; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; proxy_set_header Host $host; } } }
Slide 11
Slide 11 text
リバプロ側の設定例( Ingressリソース) ■ Ingressリソース(nginx ingress controllerの場合) ● proxy-http-version: "1.1" ○ Keep-Aliveで接続を維持 ● enable-websocket: "true" ○ WebSocketを有効化 ● rewrite-target: /$2 ○ 内部では / にリライトし、 Grafana側ではサブパス 設定で動作 ● proxy_set_header ○ UpgradeヘッダとConnectionヘッダをセット 11 apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: grafana-ingress annotations: nginx.ingress.kubernetes.io/proxy-http-version: "1.1" nginx.ingress.kubernetes.io/enable-websocket: "true" nginx.ingress.kubernetes.io/rewrite-target: /$2 nginx.ingress.kubernetes.io/configuration-snippet: | proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; spec: ingressClassName: nginx rules: - host: example.com http: paths: - path: /grafana(/|$)(.*) pathType: Prefix backend: service: name: grafana port: number: 3000
Slide 12
Slide 12 text
Grafana側の設定 12 https://grafana.com/tutorials/run-grafana-behind-a-proxy/ [server] domain = example.com root_url = %(protocol)s://%(domain)s:%(http_port)s/grafana/ serve_from_sub_path = true ■/etc/grafana/grafana.ini ● domain ○ リバースプロキシで公開するホスト名 ● root_url ○ GrafanaのベースURL(外からアクセスされる URL) ○ ※サブパス( /grafana/)を使う場合必須 ● serve_from_sub_path ○ root_url に指定したサブパスを使うか否か
Slide 13
Slide 13 text
設定しないと 裏でエラーがすごい出る 😫😫😫 13 https://github.com/grafana/grafana/issues/42327
Slide 14
Slide 14 text
共有の経緯 みんな知らなそう わりとIssueあげがち - WebSocketのトラシュー - アプリを疑いがち - 設定すれば解決する ユースケースが多岐にわたる - リバプロごとに設定ちがう - リバプロ自体の知見が必要 設定しなくても困らない - 裏でエラーが出続けるだけで画面上問題ない - ただ、何かしらの症状は出そう 14
Slide 15
Slide 15 text
まとめ ● Grafana Liveとは ○ Grafanaのリアルタイムストリーミングを支える機能 ■ WebSocketでクライアント -サーバ間の双方向通信をする ● リバプロ配下で動かすとき ○ リバプロ側も、 Grafana側も設定が必要 ● 実際に設定する場合は公式ドキュメント・ブログを確認してね! ○ Set up Grafana Live ○ Run Grafana behind a reverse proxy 15
Slide 16
Slide 16 text
16 EOF