Grafana
Grafanaとは
[編集]概要
[編集]Grafanaは、メトリクス、ログ、トレースなどの観測可能性データを可視化・分析するためのオープンソースプラットフォームです。2014年にTorkel Ödegaardによって開発され、現在では監視・可視化分野で最も人気のあるツールの一つとなっています。
主な特徴
[編集]- マルチデータソース対応: Prometheus、InfluxDB、Elasticsearch、MySQL、PostgreSQL、SQLiteなど60以上のデータソースに対応
- 豊富なビジュアライゼーション: グラフ、テーブル、ヒートマップ、ゲージなど多様な表示形式
- リアルタイム監視: ライブダッシュボードによる即座のデータ更新
- アラート機能: 閾値ベースのアラート通知
- 拡張性: プラグインアーキテクチャによる機能拡張
- コミュニティ: 活発なオープンソースコミュニティ
用途
[編集]- インフラストラクチャ監視: サーバー、ネットワーク、アプリケーションの監視
- アプリケーション監視: APM(Application Performance Monitoring)
- ビジネスメトリクス: KPI、売上、ユーザー行動の可視化
- IoTデータ分析: センサーデータの収集・分析
- ログ分析: 集約されたログデータの可視化
インストールとセットアップ
[編集]システム要件
[編集]- OS: Linux、macOS、Windows
- メモリ: 最小512MB、推奨2GB以上
- ストレージ: 最小1GB、推奨10GB以上
- ネットワーク: インターネット接続(プラグインダウンロード用)
インストール方法
[編集]Docker(推奨)
[編集]# 最新版のGrafanaを起動 docker run -d --name=grafana -p 3000:3000 grafana/grafana-enterprise # 永続化ボリュームを使用 docker run -d \ --name=grafana \ -p 3000:3000 \ -v grafana-storage:/var/lib/grafana \ grafana/grafana-enterprise
Ubuntu/Debian
[編集]# GPGキーを追加 wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add - # リポジトリを追加 echo "deb https://packages.grafana.com/oss/deb stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list # インストール sudo apt-get update sudo apt-get install grafana
CentOS/RHEL
[編集]# リポジトリファイルを作成 sudo tee /etc/yum.repos.d/grafana.repo<<EOF [grafana] name=grafana baseurl=https://packages.grafana.com/oss/rpm repo_gpgcheck=1 enabled=1 gpgcheck=1 gpgkey=https://packages.grafana.com/gpg.key sslverify=1 sslcacert=/etc/pki/tls/certs/ca-bundle.crt EOF # インストール sudo yum install grafana
初期設定
[編集]# サービスの開始 sudo systemctl start grafana-server sudo systemctl enable grafana-server # ファイアウォール設定(CentOS/RHEL) sudo firewall-cmd --permanent --add-port=3000/tcp sudo firewall-cmd --reload
初回ログイン
[編集]- ブラウザで
http://localhost:3000にアクセス - デフォルトユーザー名:
admin、パスワード:admin - 初回ログイン後、パスワードの変更を求められます
基本概念の理解
[編集]主要コンポーネント
[編集]データソース(Data Source)
[編集]Grafanaがデータを取得する外部システムです。各データソースには固有のクエリ言語があります。
ダッシュボード(Dashboard)
[編集]複数のパネルを配置してデータを可視化する画面です。組織内で共有可能です。
パネル(Panel)
[編集]個々のグラフやテーブルなどの可視化要素です。クエリとビジュアライゼーションの組み合わせで構成されます。
クエリ(Query)
[編集]データソースからデータを取得するための命令です。各データソースの構文に従って記述します。
データフロー
[編集]データソース → クエリ → パネル → ダッシュボード → ユーザー
組織構造
[編集]- Organization: 最上位の管理単位
- Team: ユーザーグループ
- User: 個別ユーザー
- Role: 権限レベル(Admin、Editor、Viewer)
データソースの設定
[編集]データソースの追加手順
[編集]- 左サイドメニューから「Configuration」→「Data sources」を選択
- 「Add data source」をクリック
- 使用するデータソースタイプを選択
- 接続情報を入力
- 「Save & test」で接続確認
主要データソース設定例
[編集]Prometheus
[編集]# 設定項目 URL: http://prometheus:9090 Access: Server (default) Scrape interval: 15s Query timeout: 60s HTTP Method: GET
InfluxDB
[編集]# InfluxDB v1.x URL: http://influxdb:8086 Database: mydb User: admin Password: password # InfluxDB v2.x URL: http://influxdb:8086 Organization: myorg Token: your-token Default Bucket: mybucket
MySQL/PostgreSQL
[編集]Host: localhost:3306 Database: grafana_db User: grafana_user Password: secure_password SSL Mode: disable Max open connections: 100 Max idle connections: 2 Max connection lifetime: 14400
データソース管理のベストプラクティス
[編集]- 環境ごとに適切な命名規則を使用
- 接続プールの設定を最適化
- セキュリティ認証を適切に設定
- テスト環境と本番環境のデータソースを分離
ダッシュボードの作成
[編集]新規ダッシュボード作成
[編集]- 「+」アイコンから「Dashboard」を選択
- 「Add new panel」でパネルを追加
- クエリとビジュアライゼーションを設定
- 「Save dashboard」で保存
ダッシュボード設定
[編集]基本設定
[編集]- Title: ダッシュボード名
- Description: 説明文
- Tags: 検索・分類用タグ
- Timezone: タイムゾーン設定
- Auto-refresh: 自動更新間隔
レイアウト設定
[編集]- Grid: パネルの配置グリッド
- Repeat: 変数に基づく繰り返し表示
- Height: パネルの高さ設定
テンプレート変数
[編集]動的なダッシュボードを作成するための変数機能です。
変数タイプ
[編集]- Query: データソースからの動的値取得
- Custom: 固定値リスト
- Constant: 定数値
- Datasource: データソース選択
- Interval: 時間間隔選択
- Text box: 自由入力
変数の使用例
[編集]-- MySQL クエリ例 SELECT value FROM metrics WHERE host = '$hostname' AND time >= $__timeFrom() AND time <= $__timeTo()
パネルとビジュアライゼーション
[編集]パネルタイプ一覧
[編集]Time Series(時系列グラフ)
[編集]最も基本的なグラフ形式です。メトリクスの時系列変化を表示します。
- 設定項目:
- Draw style: Line、Bars、Points
- Line interpolation: Linear、Smooth、Step
- Fill opacity: 塗りつぶしの透明度
- Gradient mode: グラデーション効果
Stat(統計値)
[編集]単一の値や統計情報を大きく表示します。
- 設定項目:
- Value: 表示する値の選択
- Text size: フォントサイズ
- Color mode: 色の表示方法
- Orientation: 横向き・縦向き
Table(テーブル)
[編集]データを表形式で表示します。
- 設定項目:
- Columns: 列の設定
- Sorting: ソート設定
- Pagination: ページネーション
- Cell display mode: セルの表示方法
高度なビジュアライゼーション
[編集]Heatmap(ヒートマップ)
[編集]時間軸とバケット軸で二次元のデータ分布を表示します。
Gauge(ゲージ)
[編集]閾値に対する現在値の位置を円形または線形ゲージで表示します。
Bar gauge(棒ゲージ)
[編集]複数の値を棒グラフ形式で比較表示します。
パネル共通設定
[編集]Data transformations
[編集]- クエリ結果を加工する機能:
- Reduce: 集約処理
- Filter: フィルタリング
- Organize fields: フィールド整理
- Add field from calculation: 計算フィールド追加
Field options
[編集]- フィールドごとの表示設定:
- Display name: 表示名
- Unit: 単位設定
- Min/Max: 最小・最大値
- Decimals: 小数点桁数
- Color: 色設定
クエリの作成と最適化
[編集]クエリエディター
[編集]基本操作
[編集]- Query inspector: クエリの詳細確認
- Query history: クエリ履歴
- Query cache: クエリキャッシュ
- Time range: 時間範囲設定
データソース別クエリ例
[編集]Prometheus
[編集]# 基本的なメトリクス取得 up # レート計算 rate(http_requests_total[5m]) # 集約関数 sum(rate(http_requests_total[5m])) by (instance) # 複雑なクエリ histogram_quantile(0.95, sum(rate(http_request_duration_seconds_bucket[5m])) by (le) )
InfluxDB (InfluxQL)
[編集]-- 基本的なSELECT SELECT mean("value") FROM "cpu_usage" WHERE time >= now() - 1h GROUP BY time(5m) -- 複数のフィールド SELECT mean("cpu"), mean("memory") FROM "system" WHERE "host" = 'server1' AND time >= now() - 24h GROUP BY time(1h) fill(null)
Elasticsearch
[編集]{ "query": { "bool": { "must": [ {"range": {"@timestamp": {"gte": "now-1h"}}}, {"term": {"level": "error"}} ] } }, "aggs": { "error_count": { "date_histogram": { "field": "@timestamp", "interval": "5m" } } } }
クエリ最適化のポイント
[編集]パフォーマンス向上
[編集]- 時間範囲の制限: 必要最小限の時間範囲に絞る
- 集約の活用: 生データではなく集約データを使用
- インデックスの活用: データソース側のインデックス最適化
- キャッシュの活用: Grafanaのクエリキャッシュを有効活用
クエリデバッグ
[編集]- Query inspectorでクエリの実行時間確認
- データソースのログ確認
- ネットワーク遅延の調査
アラートの設定
[編集]アラート機能の概要
[編集]Grafana 8.0以降では、新しいアラートシステム「Unified Alerting」が導入されています。
アラートルールの作成
[編集]基本手順
[編集]- 「Alerting」→「Alert rules」を選択
- 「New rule」をクリック
- クエリとアラート条件を設定
- 評価間隔と期間を設定
- 通知設定を行う
アラートルール設定例
[編集]# CPU使用率アラート Query: avg(cpu_usage) by (instance) Condition: IS ABOVE 80 Evaluation: every 1m for 5m Summary: "High CPU usage detected" Description: "CPU usage is {{ $value }}% on {{ $labels.instance }}"
通知チャンネル設定
[編集]Slack通知
[編集]{ "webhook_url": "https://hooks.slack.com/services/...", "channel": "#alerts", "username": "Grafana", "title": "{{ range .Alerts }}{{ .Annotations.summary }}{{ end }}", "text": "{{ range .Alerts }}{{ .Annotations.description }}{{ end }}" }
Email通知
[編集]addresses: ["admin@example.com", "team@example.com"] subject: "Grafana Alert: {{ .GroupLabels.alertname }}" html_body: <h2>Alert Details</h2> {{ range .Alerts }} <p><strong>{{ .Annotations.summary }}</strong></p> <p>{{ .Annotations.description }}</p> {{ end }}
アラート管理
[編集]サイレンス機能
[編集]メンテナンス時などに一時的にアラートを無効化する機能です。
アラートグループ化
[編集]関連するアラートをグループ化して通知頻度を調整します。
ユーザー管理と権限
[編集]ユーザー管理
[編集]ユーザー作成
[編集]- 「Configuration」→「Users」を選択
- 「New user」をクリック
- ユーザー情報を入力
- 組織とロールを設定
認証方式
[編集]- Built-in: Grafana内蔵認証
- LDAP/AD: Active Directory連携
- OAuth: Google、GitHub、Azure ADなど
- SAML: エンタープライズSSO
権限システム
[編集]組織レベル権限
[編集]- Admin: 全ての管理権限
- Editor: ダッシュボード編集権限
- Viewer: 閲覧のみ
ダッシュボード権限
[編集]- Owner: 所有者権限
- Editor: 編集権限
- Viewer: 閲覧権限
フォルダー権限
[編集]フォルダー単位での権限管理が可能です。
チーム管理
[編集]関連するユーザーをグループ化してまとめて権限管理できます。
プラグインとカスタマイズ
[編集]プラグインの種類
[編集]データソースプラグイン
[編集]新しいデータソースへの接続を提供します。
パネルプラグイン
[編集]新しいビジュアライゼーション方式を追加します。
アプリプラグイン
[編集]Grafana内で動作する独立したアプリケーションです。
プラグインの管理
[編集]インストール方法
[編集]# CLIでのインストール grafana-cli plugins install <plugin-id> # 手動インストール wget https://grafana.com/api/plugins/<plugin-id>/versions/<version>/download unzip <plugin-file> -d /var/lib/grafana/plugins/
おすすめプラグイン
[編集]- Pie Chart: 円グラフ表示
- Worldmap Panel: 世界地図での可視化
- Clock Panel: 時計表示
- Text Panel: Markdown/HTMLテキスト表示
- Diagram Panel: ネットワーク図作成
テーマとカスタマイズ
[編集]カスタムテーマ
[編集]CSSを使用してGrafanaの外観をカスタマイズできます。
ブランディング
[編集]ロゴやフッターのカスタマイズが可能です(Enterprise版)。
パフォーマンス最適化
[編集]データベース最適化
[編集]SQLite(デフォルト)
[編集]小規模環境向けですが、本格運用ではMySQL/PostgreSQLを推奨します。
MySQL/PostgreSQL設定例
[編集][database] type = mysql host = 127.0.0.1:3306 name = grafana user = grafana password = password max_open_conn = 300 max_idle_conn = 300 conn_max_lifetime = 14400 log_queries = false
キャッシュ設定
[編集]メモリキャッシュ
[編集][caching] enabled = true [cache.memory] gc_interval = 60s
Redis キャッシュ
[編集][cache.redis] enabled = true address = 127.0.0.1:6379 password = db = 0
パフォーマンス監視
[編集]メトリクス収集
[編集]Grafana自体のメトリクスを監視することが重要です。
主要メトリクス
[編集]- Response time: レスポンス時間
- Query duration: クエリ実行時間
- Memory usage: メモリ使用量
- Database connections: DB接続数
運用とメンテナンス
[編集]バックアップ
[編集]データベースバックアップ
[編集]# SQLite cp /var/lib/grafana/grafana.db /backup/grafana_$(date +%Y%m%d).db # MySQL mysqldump -u grafana -p grafana > grafana_backup_$(date +%Y%m%d).sql # PostgreSQL pg_dump -U grafana grafana > grafana_backup_$(date +%Y%m%d).sql
設定ファイルバックアップ
[編集]# 設定ファイル cp /etc/grafana/grafana.ini /backup/ # プラグイン tar -czf /backup/plugins_$(date +%Y%m%d).tar.gz /var/lib/grafana/plugins/
ログ管理
[編集]ログ設定
[編集][log] mode = console file level = info filters = rendering:debug [log.console] level = info format = console [log.file] level = info format = text log_rotate = true max_lines = 1000000 max_size_shift = 28 daily_rotate = true max_days = 7
アップデート手順
[編集]事前準備
[編集]- 現在の設定とデータをバックアップ
- アップデート内容の確認
- テスト環境での検証
アップデート実行
[編集]# パッケージ更新(Ubuntu/Debian) sudo apt-get update sudo apt-get install grafana # サービス再起動 sudo systemctl restart grafana-server
トラブルシューティング
[編集]よくある問題と解決方法
[編集]起動しない場合
[編集]- ログファイルの確認
- ポート競合の確認
- データベース接続の確認
- 権限設定の確認
パフォーマンスが悪い場合
[編集]- クエリの最適化
- データソースの負荷確認
- メモリ使用量の確認
- ネットワーク遅延の調査
データが表示されない場合
[編集]- データソース接続の確認
- クエリ構文の確認
- 時間範囲の確認
- 権限設定の確認
ログ分析
[編集]重要なログパターン
[編集]# 接続エラー database connection failed # クエリエラー query execution error # メモリ不足 out of memory # 認証エラー authentication failed
デバッグ手法
[編集]Query Inspector の活用
[編集]- クエリの実行時間確認
- 実際のクエリ内容確認
- レスポンスデータの確認
ブラウザ開発者ツール
[編集]- ネットワークタブでAPI呼び出し確認
- コンソールでJavaScriptエラー確認
ベストプラクティス
[編集]ダッシュボード設計
[編集]設計原則
[編集]- 目的の明確化: 何を監視したいかを明確にする
- 情報の階層化: 重要な情報を上部に配置
- 一貫性の保持: 色やフォントの統一
- レスポンシブ対応: 様々な画面サイズに対応
推奨レイアウト
[編集]| Overview Stats | Key Metrics |
|---|---|
| Main Time Series Chart | |
| Detailed Metrics | Error Logs |
パフォーマンス最適化
[編集]クエリ最適化
[編集]- 時間範囲の適切な設定
- 集約クエリの活用
- 不要なデータの除外
- キャッシュの活用
リソース管理
[編集]- メモリ使用量の監視
- CPU使用率の最適化
- ディスク容量の管理
- ネットワーク帯域の考慮
セキュリティ
[編集]認証・認可
[編集]- 強力なパスワードポリシー
- 多要素認証の導入
- 適切な権限設定
- 定期的な権限見直し
ネットワークセキュリティ
[編集]- HTTPS の使用
- ファイアウォール設定
- VPN経由でのアクセス
- IPアドレス制限
運用体制
[編集]監視体制
[編集]- 24時間監視体制の構築
- エスカレーション手順の明文化
- 定期的な訓練の実施
- 改善点の継続的な検討
ドキュメント管理
[編集]- 運用手順書の作成
- トラブルシューティングガイド
- 設定変更履歴の管理
- ナレッジベースの構築
まとめ
[編集]Grafanaは強力で柔軟な可視化プラットフォームですが、その機能を最大限活用するには適切な設計と運用が重要です。このハンドブックを参考に、段階的に導入を進め、組織のニーズに合わせてカスタマイズしていくことをお勧めします。
継続的な学習と改善により、より効果的な監視・可視化システムを構築できるでしょう。