Contents
1. 公式パッケージでのインストール
本節では、OS のパッケージ管理ツールを利用した 安定版 Grafana(最新版の 10 系) の導入手順と、導入後に必ず行うべき基本設定について解説します。パッケージ方式は OS のアップデートと連動できるため、長期運用に向いています。
1‑1. Debian / Ubuntu 系へのインストール
Debian/Ubuntu 系ディストリビューションでは、公式 APT リポジトリを追加した上で grafana パッケージをインストールします。以下の手順は Grafana OSS(オープンソース版) の最新安定版に対応しています。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
# 必要なツールと GPG キーの取得 sudo apt-get update && sudo apt-get install -y gnupg2 curl ca-certificates curl -fsSL https://apt.grafana.com/gpg.key | \ gpg --dearmor -o /usr/share/keyrings/grafana-archive-keyring.gpg # APT リポジトリを設定 echo "deb [signed-by=/usr/share/keyrings/grafana-archive-keyring.gpg] https://apt.grafora.com stable main" | \ sudo tee /etc/apt/sources.list.d/grafana.list > /dev/null # パッケージインストールとサービス起動 sudo apt-get update sudo apt-get install -y grafana sudo systemctl enable --now grafana-server |
ポイント
*signed-byオプションでキーの所在を明示すると、APT が不正なリポジトリを受け付けにくくなります。
1‑2. RHEL / CentOS / AlmaLinux 系へのインストール(YUM/DNF)
RHEL 系では rpm.grafana.com の公式リポジトリファイルを直接配置します。従来の yum install https://rpm.grafana.com/grafana.repo という記述は非推奨で、正しい手順は次の通りです。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
# リポジトリ定義ファイルを作成(YUM/DNF 共通) cat <<'EOF' | sudo tee /etc/yum.repos.d/grafana.repo [grafana] name=Grafana OSS baseurl=https://rpm.grafana.com/ repo_gpgcheck=1 gpgkey=https://rpm.grafana.com/rpm-gpg-key.asc enabled=1 gpgcheck=1 EOF # パッケージインストールとサービス起動 sudo yum clean all # または dnf clean all sudo yum install -y grafana sudo systemctl enable --now grafana-server |
ポイント
*repo_gpgcheck=1とgpgcheck=1を設定すると、リポジトリ自体と個々の RPM の署名を両方検証でき、供給チェーン攻撃への耐性が向上します。
1‑3. インストール直後の初期設定
インストール完了後は以下の操作で基本的な安全対策を施してください。
| 作業 | コマンド例 / 操作 |
|---|---|
| デフォルト管理者パスワード変更 | ブラウザで http://<IP>:3000 にアクセス → admin / admin でログイン → Settings → Change Password |
| 管理者メールアドレス設定 | Settings → User > Profile でメールを入力 |
| デフォルト組織名・タイムゾーン変更 | Settings → Preferences から編集 |
2. Docker コンテナでのデプロイ
Docker 環境向けに、公式イメージ grafana/grafana:latest(現在は 10 系) を用いた最小構成と、本番運用時に推奨される追加設定を解説します。コンテナ化はスケールアウトや CI/CD パイプラインとの親和性が高い点がメリットです。
2‑1. 最小構成の起動例
|
1 2 3 4 5 6 7 8 |
docker run -d \ --name=grafana \ -p 3000:3000 \ -e "GF_SECURITY_ADMIN_PASSWORD=StrongPass!123" \ -e "GF_SERVER_ROOT_URL=https://grafana.example.com" \ -v grafana-data:/var/lib/grafana \ grafana/grafana:latest |
GF_SECURITY_ADMIN_PASSWORDで初期 admin パスワードを設定し、起動直後にパスワード変更が不要になるようにしています。GF_SERVER_ROOT_URLはリバースプロキシ経由で HTTPS 化する際の必須項目です(後述)。
2‑2. Docker Compose による本番向けスタック例
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
version: "3.8" services: grafana: image: grafana/grafana:latest container_name: grafana restart: unless-stopped ports: - "3000:3000" environment: GF_SECURITY_ADMIN_PASSWORD: StrongPass!123 GF_SERVER_ROOT_URL: https://grafana.example.com # TLS 設定はリバースプロキシ側で行うのでここでは無効化 GF_SERVER_PROTOCOL: http volumes: - grafana-data:/var/lib/grafana volumes: grafana-data: |
ポイント
*restart: unless-stoppedにより、ホスト再起動時やコンテナクラッシュ時に自動復旧します。
3. Helm Chart を使った Kubernetes デプロイ
Kubernetes クラスタでの統合管理が必要な場合は、公式 Helm チャート grafana/grafana が最も手軽です。本節では Helm v3 を前提に、TLS/HTTPS と永続化設定を組み込んだ例を示します。
3‑1. Helm リポジトリの登録とチャート取得
|
1 2 3 |
helm repo add grafana https://grafana.github.io/helm-charts helm repo update |
注意:公式ドキュメントは
helm installの前に必ずrepo updateを実行するよう記載しています。これにより最新の Chart バージョンが取得できます。
3‑2. values.yaml(主要設定)
|
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 |
# values.yaml adminUser: admin adminPassword: StrongPass!123 service: type: LoadBalancer # 外部公開の場合 port: 80 ingress: enabled: true hosts: - host: grafana.example.com paths: - / tls: - secretName: grafana-tls # TLS 証明書は別途作成(例:cert-manager) persistence: enabled: true type: pvc size: 10Gi # Grafana 本体の HTTPS 化を無効化し、Ingress に任せる設定 grafana.ini: server: protocol: http root_url: https://grafana.example.com |
- TLS 設定は Ingress が担当するため、
grafana.ini.server.protocolはhttpのままで構いません。 - 永続化 (
persistence.enabled) により、再デプロイ時でもダッシュボードやプラグインが保持されます。
3‑3. デプロイコマンド
|
1 2 3 4 5 |
helm install grafana-prod grafana/grafana \ --namespace monitoring \ --create-namespace \ -f values.yaml |
ポイント
*--create-namespaceは初回デプロイ時にのみ必要です。既存の名前空間がある場合は省略してください。
4. セキュリティ強化:TLS/HTTPS と認証プロキシ
Grafana の管理画面は機密情報(データソース資格情報やダッシュボードの設定)が含まれるため、必ず暗号化通信で保護し、外部からの直接アクセスを制限 することが推奨されます。本節では代表的な 2 つのパターン(リバースプロキシ経由と内部 TLS)を紹介します。
4‑1. Nginx リバースプロキシで HTTPS を付与
以下は Let’s Encrypt の自動取得に certbot を併用した例です。Grafana 本体は HTTP(ポート 3000)で起動し、Nginx が TLS 終端点となります。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
# /etc/nginx/conf.d/grafana.conf server { listen 443 ssl; server_name grafana.example.com; ssl_certificate /etc/letsencrypt/live/grafana.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/grafana.example.com/privkey.pem; # HTTP→HTTPS リダイレクトは別途設定(80 番ポートの server ブロック) location / { proxy_pass http://127.0.0.1:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto https; # 必要に応じてヘッダーで認証情報を渡す(Auth Proxy 連携) } } |
手順サマリー
sudo apt-get install nginx certbot python3-certbot-nginx(Ubuntu)sudo certbot --nginx -d grafana.example.comで証明書取得と自動設定。- Nginx 設定を保存し、
sudo systemctl reload nginx
ポイント
*X-Forwarded-Proto httpsヘッダーは Grafana の「外部 URL」判定に必須です。Grafana 側でGF_SERVER_ROOT_URL=https://grafana.example.comを設定しておくと、メール通知やリンクが正しく生成されます。
4‑2. Grafana の組み込み TLS(自己署名証明書)
内部ネットワークだけで完結する構成の場合は、Grafana が直接 TLS 証明書を提供できます。以下は自己署名証明書の作成例です。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
# 秘密鍵と証明書の生成 openssl req -newkey rsa:2048 -nodes -keyout grafana.key \ -x509 -days 365 -out grafana.crt -subj "/CN=grafana.internal" # 設定ファイルにパスを追加(/etc/grafana/grafana.ini) cat <<EOF >> /etc/grafana/grafana.ini [server] protocol = https cert_file = /etc/grafana/certs/grafana.crt cert_key = /etc/grafana/certs/grafana.key http_port = 3000 # HTTPS のポートは同じく 3000(内部利用のみ) EOF # 証明書を配置し、サービス再起動 sudo mkdir -p /etc/grafana/certs sudo cp grafana.crt grafana.key /etc/grafana/certs/ sudo systemctl restart grafana-server |
注意
* 自己署名証明書はブラウザで警告が出ます。内部ユーザーだけが利用する場合に限定してください。
4‑3. 認証プロキシ(Auth Proxy)によるシングルサインオン
企業環境では Keycloak、Okta、Azure AD などの IdP と連携し、Grafana の認証を外部に委譲することが一般的です。設定例は以下の通りです。
|
1 2 3 4 5 6 7 8 |
# /etc/grafana/grafana.ini の一部 [auth.proxy] enabled = true header_name = X-Forwarded-User # IdP が付与したユーザー名ヘッダー header_property = username auto_sign_up = true # 初回アクセス時に自動でローカルユーザー作成 ldap_sync_ttl = 60 |
リバースプロキシ側(例:Nginx)で IdP の認証結果を X-Forwarded-User ヘッダーとして転送します。これにより、Grafana 内部のパスワード管理が不要になり、SSO が実現 します。
5. Prometheus データソースの登録と接続確認
この章では、Grafana に Prometheus をデータソースとして追加する手順と、TLS/Basic Auth が有効な環境での注意点を詳述します。接続失敗時に役立つトラブルシューティング表も掲載しています。
5‑1. UI からの基本設定
- 左メニュー → Settings → Data Sources を開く
- 「Add data source」→「Prometheus」を選択
- 必要項目を入力(以下はサンプル)
| 項目 | 推奨値 | 補足 |
|---|---|---|
| URL | http://prometheus.monitoring.svc:9090 (K8s 内)https://prometheus.example.com:443(外部) |
HTTP の場合は内部ネットワークだけに限定。HTTPS を利用するときは証明書の検証設定が必要です |
| Access | Server (default) |
Grafana サーバから直接アクセス |
| TLS/SSL | 「Skip TLS Verify」→false、CA 証明書を「Certificate file」に指定 |
社内 CA の場合はファイルパス(例: /etc/grafana/certs/ca.crt) |
| Basic Auth | 必要に応じて有効化し、ユーザー名・パスワードを入力 | Prometheus が basic auth を提供しているケースのみ |
設定が完了したら Save & test ボタンで接続確認します。
5‑2. 接続エラーと対処法
| エラーメッセージ | 主な原因 | 推奨対策 |
|---|---|---|
Failed to fetch (status 0) |
ネットワーク遮断、Prometheus が停止中 | Grafana サーバ上で curl http://<prom-host>:9090/metrics を実行し応答を確認 |
TLS handshake timeout |
証明書不一致・自己署名証明書が未設定 | CA 証明書を正しく配置し、Skip TLS Verify は本番では 使用しない |
401 Unauthorized |
Basic Auth 資格情報が誤っている、もしくは認可ポリシー不備 | Prometheus 側の auth 設定と Grafana の入力内容を再確認 |
connection refused |
ポート番号ミス、ファイアウォールブロック | ファイアウォールや Security Group で 9090/TCP が許可されているか検証 |
接続が成功したら Query Inspector(パネル編集画面右上の歯車アイコン)で up クエリを実行し、少なくとも 1 件以上の 1 が返ってくれば正常です。
6. ダッシュボード作成と基本パネル設定
Prometheus データが取得できたら、次は 可視化 です。本節では Grafana 10 の UI に合わせた新規ダッシュボードの作り方と、代表的なビジュアライゼーションごとの PromQL サンプルを紹介します。
6‑1. ダッシュボード作成フロー
- 左メニュー → Dashboards → New → Dashboard をクリック
- 表示された空白画面の右上にある Add new panel ボタンでパネル編集へ遷移
- データソースとして先ほど登録した Prometheus を選択し、クエリエディタに PromQL を入力
ポイント:Grafana 10 では「Panel edit」サイドバーが常に表示され、クエリ変更時にリアルタイムでプレビューが更新されます。
6‑2. ビジュアライゼーション別プロンプト例
| ビジュアル | PromQL サンプル | 解説 |
|---|---|---|
| Graph(時間系列) | rate(cpu_usage_seconds_total{job="node_exporter"}[5m]) |
CPU 使用率の 5 分平均を折れ線グラフで表示 |
| Stat(単一数値) | sum(http_requests_total{status=~"2.."}) |
成功した HTTP リクエスト総数を大きく表示 |
| Table(表形式) | topk(5, avg by (instance) (node_memory_MemAvailable_bytes)) |
メモリ空き容量上位 5 インスタンスのテーブル |
| Bar gauge | histogram_quantile(0.95, sum(rate(request_duration_seconds_bucket[5m])) by (le)) |
95 パーセンタイルのレスポンスタイムをゲージ表示 |
各パネルでは Axes, Thresholds, Field overrides を活用して単位変換や色分けが可能です。設定はサイドバー下部にある Overrides タブで行います。
7. 変数・テンプレートで汎用的なダッシュボード設計
複数の環境(prod / staging / dev)やサービス間で共通化したい場合は、Dashboard Variables を使ってクエリを動的に切り替えます。本章では変数作成手順と実践的な活用例を示します。
7‑1. 変数の作成方法
- ダッシュボード右上の Settings → Variables をクリック
- Add variable ボタンで新規変数を追加し、Type に
Queryを選択 - Prometheus のラベル取得クエリ例:
|
1 2 |
label_values(job) |
これにより $job という変数が生成され、全ジョブ名の一覧がドロップダウンとして表示されます。
7‑2. 変数を使った動的クエリ例
| シナリオ | 変数定義 | クエリ例 |
|---|---|---|
| ジョブ別 CPU 使用率 | $job(上記) |
rate(cpu_usage_seconds_total{job="$job"}[5m]) |
| インスタンス単位のメモリ使用量 | $instance (label_values(instance)) |
node_memory_Active_bytes{instance=~"$instance"} |
| 複数選択可能な環境切替 | $env(prod|staging|dev) |
http_requests_total{environment=~"$env"} |
変数の Multi‑value と Include All option を有効にすると、複数ジョブ同時表示や「All」選択で正規表現 .* に自動展開されます。Refresh 設定を「On Dashboard Load」にしておくと、ラベルが変化した際にも最新情報が取得できます。
8. ダッシュボードの保存・エクスポート・インポート、アラート設定、運用ベストプラクティス
作成したダッシュボードは組織全体で共有し、変更履歴やバックアップを管理する必要があります。また、監視だけでなく アラート も同時に設計するとインシデント対応が迅速になります。
8‑1. JSON エクスポートとインポート手順
| 手順 | 操作内容 |
|---|---|
| エクスポート | ダッシュボード上部メニュー → Share → Export タブ → Download JSON |
| インポート | 別環境の Grafana で Dashboards → Import を選択し、先ほどダウンロードした dashboard.json をアップロード。変数マッピングが必要な場合は画面指示に従う |
ポイント:Grafana 10 ではインポート時にバージョン互換性チェックが自動で行われます。古い環境へ持ち込む際は、
grafana-cli admin reset-admin-passwordなどで管理者権限を確保してから実施してください。
8‑2. 基本的なアラートルール作成と通知チャネル連携
- 任意のパネル → Alert タブ → Create Alert Rule
- 条件式例(CPU 使用率が 80 % 超過したら)
|
1 2 3 |
WHEN avg() OF query(A, 5m) IS ABOVE 0.8 FOR 2m |
- Notifications に Slack または Email のチャネルを追加
| チャネル | 設定項目 |
|---|---|
| Slack | Webhook URL(例:https://hooks.slack.com/services/XXX/YYY/ZZZ) |
| SMTP サーバ、送信元アドレス、受信者リスト |
- Alerting → Notification policies で優先度や抑止時間(silence)を設定し、ノーティフィケーションのフローを統一管理。
8‑3. 権限管理・フォルダ構成・バックアップ推奨設定
| 項目 | 推奨内容 |
|---|---|
| フォルダ階層 | Monitoring/Infra, Monitoring/Application, Team/DevOps のように機能別/チーム別に分割し、フォルダ単位で RBAC を適用 |
| RBAC | Grafana 組み込みロール(Admin, Editor, Viewer)+外部 IdP(Keycloak/OIDC)でカスタムロールを作成。例:team:devops-editor だけが DevOps フォルダへ書き込み可能 |
| バックアップ | - データベース(SQLite → /var/lib/grafana/grafana.db、PostgreSQL → pg_dump)- ダッシュボード JSON の定期エクスポート ( grafana-cli admin backup) - PVC スナップショット(K8s デプロイ時)を 24 時間ごとに S3 バケットへ保存 |
| 監査ログ | grafana.ini の [auth] セクションで log_auth_success = true、log_auth_failure = true を有効化し、syslog に転送 |
ベストプラクティスまとめ
1. TLS + Auth Proxy で外部からの直接アクセスを遮断する。
2. 永続化 PVC と 定期バックアップ を組み合わせて障害時のリカバリを自動化。
3. アラートは 閾値だけでなくfor条件や 通知ポリシー でノイズを削減し、運用負荷を低減する。
まとめ
- 公式パッケージ(APT/YUM)・Docker・Helm のいずれの方法でも、最新の Grafana 10 系を安全に導入できる。
- TLS/HTTPS と 認証プロキシ によって管理画面への不正アクセスリスクを最小化し、企業向け SSO へ統合することが推奨される。
- Prometheus データソースは TLS 設定や Basic Auth を正しく構成すれば、接続失敗のトラブルも容易に切り分けられる。
- ダッシュボードは 変数 と テンプレート で汎用化し、JSON エクスポート/インポートとバックアップ戦略で運用上の安全性を確保する。
- アラート設定は 通知チャネル と ポリシー を併用し、インシデント検知から対応までのフローを自動化すべきである。
以上の手順とベストプラクティスに従えば、Grafana を中心とした可視化基盤を 高速に構築・安全に運用 できるはずです。質問や環境固有の課題があれば、公式ドキュメントおよびコミュニティフォーラムも併せて参照してください。