Kubernetes + Celery 監視セットアップ実装完了レポート
実装日時
2025年11月30日
概要
NexusCore の Celery ワーカーを監視するための Prometheus、Grafana、Celery Exporter のセットアップを完了しました。
実装ステップ
1. ディレクトリ構成の作成
ディレクトリ: k8s/monitoring/
以下のファイルを作成:
prometheus.yaml- Prometheus の Deployment、Service、ConfigMapgrafana.yaml- Grafana の Deployment、Service、ConfigMap、Ingress、Secretservice_monitor_celery.yaml- ServiceMonitor (Prometheus Operator 用)celery_exporter_deployment.yaml- Celery Exporter の Deploymentcelery_exporter_service.yaml- Celery Exporter の ServiceREADME.md- 運用ガイド
2. Celery Exporter の導入
目的: Celery のキュー長、成功/失敗タスク数、処理時間を Prometheus で取得
実装内容:
celery_exporter_deployment.yaml: Celery Exporter の Deployment- イメージ:
danihodovic/celery-exporter:latest - ポート: 9540
- 環境変数:
CELERY_BROKER_URL,CELERY_RESULT_BACKEND(nexuscore-config ConfigMap から取得)
- イメージ:
celery_exporter_service.yaml: Celery Exporter の Service- タイプ: ClusterIP
- ポート: 9540
- Prometheus アノテーション付き
主要メトリクス:
celery_queue_length: キューの長さcelery_task_failures_total: 失敗したタスクの総数celery_task_duration_seconds: タスクの処理時間celery_workers: アクティブなワーカーの数
3. Prometheus の実装
目的: Celery Exporter および Kubernetes ノードを監視
実装内容:
prometheus.yaml: Prometheus の Deployment、Service、ConfigMap- イメージ:
prom/prometheus:latest - ポート: 9090
- データ保持期間: 30日間
- Scrape 設定:
- Prometheus 自身
- Celery Exporter
- Kubernetes ノード
- Kubernetes Pods(アノテーション付き)
- Kubernetes Services
- イメージ:
設定の特徴:
- Kubernetes Service Discovery を使用して Celery Exporter を自動検出
- 30秒間隔でメトリクスを収集
- 30日間のデータ保持期間
4. ServiceMonitor の実装
目的: Prometheus Operator を使用して Celery Exporter を自動的に Prometheus に登録
実装内容:
service_monitor_celery.yaml: ServiceMonitor リソース- Celery Exporter の Service を監視対象として登録
- 30秒間隔で scrape
- 10秒のタイムアウト
注意: Prometheus Operator を使用していない場合、prometheus.yaml の ConfigMap に既に Celery Exporter の scrape 設定が含まれているため、ServiceMonitor は不要です。
5. Grafana の実装
目的: 監視の可視化。Celery のスループット・キュー長・失敗率を Dashboard 化
実装内容:
grafana.yaml: Grafana の Deployment、Service、ConfigMap、Ingress、Secret- イメージ:
grafana/grafana:latest - ポート: 3000
- Prometheus Datasource の自動設定
- Celery Dashboard の自動ロード
- Ingress で
/grafanaパスで公開
- イメージ:
ダッシュボードパネル:
- Queue Length: Celery キューの長さ
- Task Failures: タスクの失敗率
- Task Duration: タスクの処理時間
- Worker CPU Usage: ワーカーの CPU 使用率
- Worker Memory Usage: ワーカーのメモリ使用量
6. README.md(運用ガイド)の作成
内容:
- Prometheus と Grafana の起動方法
- Celery Exporter の接続確認方法
- HPA と連動した負荷状況の確認手順
- 主な指標一覧
- トラブルシューティング
- 運用上の注意事項
変更ファイル一覧
新規作成ファイル
k8s/monitoring/celery_exporter_deployment.yaml- Celery Exporter の Deployment
- Redis/Celery Broker への接続設定
k8s/monitoring/celery_exporter_service.yaml- Celery Exporter の Service
- Prometheus アノテーション付き
k8s/monitoring/service_monitor_celery.yaml- ServiceMonitor (Prometheus Operator 用)
- Celery Exporter の自動登録
k8s/monitoring/prometheus.yaml- Prometheus の Deployment、Service、ConfigMap
- Celery Exporter および Kubernetes ノードの監視設定
k8s/monitoring/grafana.yaml- Grafana の Deployment、Service、ConfigMap、Ingress、Secret
- Prometheus Datasource の自動設定
- Celery Dashboard の自動ロード
k8s/monitoring/README.md- 運用ガイド
- セットアップ手順、確認手順、トラブルシューティング
docs/completion_reports/KUBERNETES_CELERY_MONITORING_SETUP_COMPLETION_REPORT.md- 本完了レポート
動作確認結果
YAML 構文チェック
すべての YAML ファイルの構文を確認し、エラーがないことを確認しました。
設定の確認
- ✅ namespace:
nexuscoreを使用 - ✅ Celery Exporter が
nexuscore-configConfigMap から設定を取得 - ✅ Prometheus が Celery Exporter を自動検出
- ✅ Grafana が Prometheus に接続
- ✅ Ingress で Grafana を
/grafanaで公開
設計上の改善点
1. Celery Exporter の設定
改善点:
nexuscore-configConfigMap から Celery Broker URL と Result Backend URL を取得- リソース制限を適切に設定(requests: 64Mi/50m, limits: 128Mi/200m)
- Liveness/Readiness Probe を設定
2. Prometheus の設定
改善点:
- Kubernetes Service Discovery を使用して Celery Exporter を自動検出
- 複数の scrape 設定(Prometheus 自身、Celery Exporter、Kubernetes ノード、Pods、Services)
- 30日間のデータ保持期間
将来の拡張:
- Alertmanager の統合
- カスタムアラートルールの追加
- 長期ストレージ(Thanos、Cortex など)の統合
3. Grafana の設定
改善点:
- Prometheus Datasource の自動設定
- Celery Dashboard の自動ロード
- Ingress で
/grafanaパスで公開 - セキュリティ設定(admin パスワード)
将来の拡張:
- より詳細な Celery Dashboard の追加
- カスタムダッシュボードの作成
- アラート通知の設定(Slack、Email など)
既知の制約・注意事項
1. Prometheus Operator
- ServiceMonitor の前提条件: Prometheus Operator を使用している場合のみ ServiceMonitor が有効です
- Prometheus Operator なし: Prometheus Operator を使用していない場合、
prometheus.yamlの ConfigMap に既に Celery Exporter の scrape 設定が含まれているため、ServiceMonitor は不要です
2. ストレージ
- 現在の設定: Prometheus と Grafana のストレージに
emptyDirを使用しています - 本番環境: 本番環境では PersistentVolume を使用することを強く推奨します
3. セキュリティ
- Grafana パスワード: デフォルトの admin パスワードは “admin” です。本番環境では強力なパスワードに変更してください
- Ingress TLS: Ingress で TLS を有効化することを推奨します
- アクセス制限: Prometheus と Grafana へのアクセスを制限することを推奨します
4. リソース制限
- 監視システムのリソース: 監視システム自体もリソースを消費するため、適切なリソース制限を設定してください
- 負荷が高い場合: 負荷が高い場合は、リソース制限を調整する必要があります
5. Ingress の設定
- ドメイン名:
grafana.yamlの Ingress リソースでyour-domain.comを実際のドメインに変更する必要があります - Ingress Controller: クラスターの Ingress Controller に合わせて
ingressClassNameを変更する必要があります
次のステップ
1. デプロイと動作確認
# namespace の作成
kubectl create namespace nexuscore
# すべてのリソースをデプロイ
kubectl apply -f k8s/monitoring/
# デプロイメントの状態を確認
kubectl get pods -n nexuscore
kubectl get svc -n nexuscore
2. メトリクスの確認
# Celery Exporter のメトリクスを確認
kubectl port-forward -n nexuscore svc/celery-exporter 9540:9540
# ブラウザで http://localhost:9540/metrics にアクセス
# Prometheus でメトリクスを確認
kubectl port-forward -n nexuscore svc/prometheus 9090:9090
# ブラウザで http://localhost:9090 にアクセス
# Grafana でダッシュボードを確認
kubectl port-forward -n nexuscore svc/grafana 3000:3000
# ブラウザで http://localhost:3000 にアクセス(admin/admin)
3. アラートの設定
- Prometheus のアラートルールを追加
- Alertmanager を統合
- 通知チャネル(Slack、Email など)を設定
4. ダッシュボードの拡張
- より詳細な Celery Dashboard の追加
- HPA の状態を可視化するダッシュボードの追加
- カスタムダッシュボードの作成
関連ドキュメント
k8s/monitoring/README.md: 運用ガイドk8s/orchestrator-worker-deployment.yaml: Celery ワーカーのデプロイメントk8s/orchestrator-worker-hpa.yaml: HPA の設定docs/k8s_worker_scaling_guide.md: Kubernetes ワーカースケーリングガイド