---
title: "LaravelでPrometheusとGrafana監視を実装：メトリクス収集・可視化・アラート設定"
url: "https://www.issoh.co.jp/tech/details/2932/"
published: 2024-07-04
updated: 2026-09-09
categories: ["Laravel"]
publisher: "株式会社一創"
---

# LaravelでPrometheusとGrafana監視を実装：メトリクス収集・可視化・アラート設定

LaravelアプリケーションにPrometheusとGrafanaを組み合わせると、HTTPリクエスト数やレスポンス時間といったアプリ固有のメトリクスを収集し、リアルタイムで可視化できる。本記事では、`promphp/prometheus_client_php`を使ったメトリクス計測の実装から、Prometheusでのスクレイピング設定、Grafanaでのダッシュボード作成とアラート通知、運用中に起きやすいトラブルの対処までを順に解説する。PHPフレームワークでの監視基盤づくりに必要な設定を、コード例つきで一通り確認できる。

## まとめ

- Laravel側のメトリクス計測は`promphp/prometheus_client_php`を導入し、Counterやhistogramでリクエスト数・処理時間を記録する。
- Prometheusは`/metrics`エンドポイントを定期スクレイピングして時系列データとして蓄積し、Grafanaはそのデータソースを参照してダッシュボードで可視化する。役割はPrometheus＝収集・保存、Grafana＝可視化・アラート表示と分かれる。
- アラートはPrometheusのalerting rules＋Alertmanager、またはGrafana側のアラートで通知でき、しきい値超過を検知して自動通知できる。
- データ欠落やメモリ肥大は`scrape_interval`や`storage.tsdb.retention.time`など設定の見直しで対処する。

## Laravelを使用したPrometheusとGrafanaによるメトリクス収集と視覚化の方法

### LaravelとPrometheusの連携方法と基本設定

まず、LaravelとPrometheusを連携させるために必要な基本設定を行います。  
Laravelアプリケーションでメトリクスを収集するには、\`promphp/prometheus\_client\_php\`パッケージをインストールします。

```
composer require promphp/prometheus_client_php
```

次に、Prometheusクライアントの設定を行います。  
\`config/prometheus.php\`ファイルを作成し、以下のように設定します。

```
return [
    'namespace' => 'my_application',
    'metrics' => [
        'http_requests_total' => [
            'type' => 'counter',
            'description' => 'Total number of HTTP requests',
            'labels' => ['method', 'endpoint', 'status_code'],
        ],
        'http_request_duration_seconds' => [
            'type' => 'histogram',
            'description' => 'Duration of HTTP requests in seconds',
            'labels' => ['method', 'endpoint'],
            'buckets' => [0.1, 0.2, 0.5, 1, 2, 5],
        ],
    ],
];
```

コントローラーでメトリクスを記録するために、Prometheusクライアントを使用します。  
以下は、HTTPリクエストのカウントを増やす例です。

```
use Prometheus\CollectorRegistry;
use Prometheus\Storage\InMemory;

class MetricsController extends Controller
{
    protected $registry;

    public function __construct()
    {
        $this->registry = new CollectorRegistry(new InMemory());
    }

    public function handleRequest(Request $request)
    {
        $counter = $this->registry->getOrRegisterCounter('my_application', 'http_requests_total', 'Total number of HTTP requests', ['method', 'endpoint', 'status_code']);
        $counter->inc([$request->method(), $request->path(), 200]);

        // Handle the request and return response...
    }
}
```

これで、LaravelアプリケーションからPrometheusにメトリクスを収集する基本設定が完了しました。

### Prometheusで収集したメトリクスをGrafanaで視覚化する手順

Prometheusで収集したメトリクスを視覚化するために、Grafanaを使用します。  
まず、Grafanaのインストールと設定を行います。  
公式ドキュメントに従ってインストールを進めてください。

次に、GrafanaでPrometheusデータソースを追加します。  
Grafanaのダッシュボードにログインし、\`Configuration\` > \`Data Sources\`に移動します。  
\`Add data source\`をクリックし、\`Prometheus\`を選択します。  
以下の設定を入力します。

```
Name: Prometheus
URL: http://localhost:9090
```

設定を保存すると、GrafanaがPrometheusからデータを取得できるようになります。  
次に、新しいダッシュボードを作成し、パネルを追加してメトリクスを表示します。  
例えば、HTTPリクエストの合計数を表示するには、以下のクエリを使用します。

```
sum(rate(http_requests_total[5m]))
```

このクエリは、過去5分間のHTTPリクエストの合計数を秒間レートで表示します。  
パネルをカスタマイズして、タイトルや表示形式を調整することもできます。

### 実際の運用で役立つ具体例とベストプラクティス

PrometheusとGrafanaを効果的に運用するための具体例とベストプラクティスを紹介します。  
まず、重要なメトリクスを特定し、適切なアラートを設定することが重要です。  
例えば、HTTPリクエストのエラーレートが一定の閾値を超えた場合に通知を受け取る設定を行います。

```
groups:
- name: example
  rules:
  - alert: HighErrorRate
    expr: rate(http_requests_total{status_code="500"}[5m]) > 0.05
    for: 10m
    labels:
      severity: critical
    annotations:
      summary: "High error rate detected"
      description: "The error rate is above 5% for the last 10 minutes."
```

このアラートルールは、過去5分間のHTTPステータスコード500のリクエストレートが5%を超えた場合にアラートをトリガーします。  
また、Grafanaでアラートを設定し、通知チャネル（例：Slack、メール）を設定することも推奨されます。

### Grafanaダッシュボードのカスタマイズと便利な機能

Grafanaダッシュボードは柔軟にカスタマイズ可能で、多くの便利な機能があります。  
例えば、パネルの表示形式を変更することで、データの視覚化をより効果的にすることができます。  
以下は、パネルのタイトルを設定し、グラフの色を変更する例です。

```
{
  "panels": [
    {
      "title": "HTTP Requests",
      "type": "graph",
      "targets": [
        {
          "expr": "sum(rate(http_requests_total[5m]))",
          "legendFormat": "{{method}} {{endpoint}}",
          "refId": "A"
        }
      ],
      "colors": [
        "#00ff00",
        "#ff0000"
      ]
    }
  ]
}
```

この設定では、パネルのタイトルを「HTTP Requests」に設定し、グラフの色を緑と赤に変更しています。  
また、Grafanaのアラート機能を使用して、特定のメトリクスが閾値を超えた場合に通知を受け取ることもできます。

### トラブルシューティング：よくある問題とその解決策

最後に、PrometheusとGrafanaの運用中によく発生する問題とその解決策を紹介します。  
例えば、メトリクスが正しく収集されない場合、Prometheusクライアントの設定やネットワーク接続を確認することが重要です。

また、Grafanaのダッシュボードが正しく表示されない場合は、データソースの設定を再確認し、Prometheusからデータが正常に取得できているかを確認します。  
場合によっては、Prometheusサーバーのログを確認してエラーを特定する必要があります。

```
journalctl -u prometheus.service
```

このコマンドを使用して、Prometheusのサービスログを確認し、エラーの詳細を把握します。  
これらのトラブルシューティングの手順を踏むことで、PrometheusとGrafanaの運用を安定させることができます。

## GrafanaとPrometheusを使用して効率的にログを出力・監視する方法

PrometheusとGrafanaを組み合わせることで、システムのパフォーマンスと可用性を効率的に監視することができます。  
特に、ログ出力と監視の自動化は、運用の効率化に大きく貢献します。  
本セクションでは、GrafanaとPrometheusを使用してログを効率的に出力・監視する方法を詳しく解説します。

### Prometheusの基本設定とログ収集の方法

Prometheusでログを収集するための基本設定を行います。  
まず、Prometheusの設定ファイル\`prometheus.yml\`を編集し、必要なエクスポーターを設定します。  
以下は、Node Exporterを使用してシステムメトリクスを収集する例です。

```
scrape_configs:
  - job_name: 'node_exporter'
    static_configs:
      - targets: ['localhost:9100']
```

次に、Prometheusがデータを収集できるように、Node Exporterをインストールします。

```
wget https://github.com/prometheus/node_exporter/releases/download/v1.1.2/node_exporter-1.1.2.linux-amd64.tar.gz
tar xvfz node_exporter-1.1.2.linux-amd64.tar.gz
cd node_exporter-1.1.2.linux-amd64
./node_exporter
```

これで、PrometheusはNode Exporterからシステムメトリクスを収集するようになります。

### Grafanaでのログ監視とダッシュボード設定

Grafanaを使用してPrometheusから収集したログを監視する方法を説明します。  
Grafanaのダッシュボードを作成し、ログの視覚化を行います。  
まず、GrafanaでPrometheusデータソースを追加します（手順は前述の通り）。

次に、新しいダッシュボードを作成し、ログ監視用のパネルを追加します。  
以下は、システムのロードアベレージを表示するクエリの例です。

```
node_load1
```

このクエリは、過去1分間のシステムの平均負荷を表示します。  
パネルを追加し、適切なタイトルと説明を設定します。  
これにより、システムのパフォーマンスを一目で確認できるようになります。

### ログ出力先の設定とカスタマイズ

Prometheusのログ出力先をカスタマイズするための設定を行います。  
デフォルトでは、Prometheusのログは標準出力に出力されますが、ログファイルに出力することも可能です。

Prometheusの起動オプションでログ出力先を指定します。

```
./prometheus --config.file=prometheus.yml --log.level=info --log.format=logfmt --log.output=prometheus.log
```

この設定により、Prometheusのログは\`prometheus.log\`ファイルに出力されます。  
また、logrotateを使用してログファイルのローテーションを設定することも推奨されます。

### アラート設定と通知の自動化

ログ監視において重要な要素の一つは、異常が発生した際に迅速に対応するためのアラート設定です。  
PrometheusとGrafanaを使用してアラートを設定し、通知を自動化する方法を説明します。

Prometheusのアラートルールを設定し、特定の条件を満たした場合にアラートをトリガーします。  
以下は、CPU使用率が一定の閾値を超えた場合にアラートを発するルールの例です。

```
groups:
- name: cpu_alerts
  rules:
  - alert: HighCpuUsage
    expr: 100 - (avg by(instance) (irate(node_cpu{mode="idle"}[5m])) * 100) > 80
    for: 5m
    labels:
      severity: warning
    annotations:
      summary: "High CPU usage detected"
      description: "CPU usage has exceeded 80% for more than 5 minutes."
```

このアラートルールをPrometheusの設定ファイルに追加し、Prometheusを再起動します。  
次に、Grafanaで通知チャネルを設定し、アラートがトリガーされた際に通知を受け取るようにします。  
Grafanaの\`Alerting\` > \`Notification channels\`で新しいチャネルを追加し、Slackやメールなどの通知方法を設定します。

### 実際の運用での応用例と効果的な監視方法

実際の運用において、PrometheusとGrafanaを使用して効果的にログを監視するための応用例をいくつか紹介します。  
例えば、ウェブサーバーのログ監視において、リクエストのエラーレートやレスポンスタイムを監視することで、システムの異常を早期に検知することができます。

```
groups:
- name: webserver_alerts
  rules:
  - alert: HighErrorRate
    expr: rate(http_requests_total{status_code=~"5.."}[5m]) > 0.01
    for: 10m
    labels:
      severity: critical
    annotations:
      summary: "High error rate detected"
      description: "Error rate for HTTP requests has exceeded 1% for the last 10 minutes."
  - alert: SlowResponseTime
    expr: histogram_quantile(0.9, sum(rate(http_request_duration_seconds_bucket[5m])) by (le)) > 1
    for: 5m
    labels:
      severity: warning
    annotations:
      summary: "Slow response time detected"
      description: "90th percentile response time for HTTP requests is above 1 second for the last 5 minutes."
```

これらのアラートルールを使用することで、システムのパフォーマンス低下やエラー発生時に迅速に対応することができます。  
また、Grafanaのダッシュボードを定期的にチェックし、長期的なトレンドを分析することで、システムの改善点を見つけることができます。

これらの手法を組み合わせることで、PrometheusとGrafanaを使用した効果的なログ監視とアラート設定が実現できます。

## PrometheusとGrafanaの連携設定とその利点について詳しく解説

PrometheusとGrafanaの連携は、システムの監視とデータの視覚化を強力にサポートします。  
このセクションでは、PrometheusとGrafanaの連携設定の手順と、連携によって得られる利点について詳しく解説します。

### PrometheusとGrafanaの連携設定手順

PrometheusとGrafanaを連携させるための設定手順を紹介します。  
まず、Prometheusサーバーをセットアップし、メトリクスを収集します。  
次に、Grafanaをインストールし、Prometheusをデータソースとして追加します。

1\. Prometheusのセットアップ:  
Prometheusをダウンロードし、インストールします。  
設定ファイル\`prometheus.yml\`を編集し、スクレイピングの設定を行います。

```
   scrape_configs:
     - job_name: 'prometheus'
       static_configs:
         - targets: ['localhost:9090']
   
```

 Prometheusを起動します。

```
   ./prometheus --config.file=prometheus.yml
   
```

2\. Grafanaのインストール:  
Grafanaをダウンロードし、インストールします。  
公式サイトからインストールガイドに従って設定を行います。

```
   sudo apt-get install -y adduser libfontconfig1
   wget https://dl.grafana.com/oss/release/grafana_7.5.10_amd64.deb
   sudo dpkg -i grafana_7.5.10_amd64.deb
   sudo systemctl start grafana-server
   sudo systemctl enable grafana-server
   
```

3\. Grafanaでのデータソース設定:  
Grafanaにログインし、\`Configuration\` > \`Data Sources\`に移動します。  
\`Add data source\`をクリックし、\`Prometheus\`を選択します。

```
   Name: Prometheus
   URL: http://localhost:9090
   
```

 設定を保存し、データソースが正しく設定されたことを確認します。

### 連携による主要な利点

PrometheusとGrafanaを連携させることにより、以下の利点が得られます。

1\. リアルタイムモニタリング:  
Prometheusが収集するメトリクスをGrafanaでリアルタイムに可視化できます。  
これにより、システムの状態を常に把握し、問題の早期発見と迅速な対応が可能になります。

2\. 高度なデータ視覚化:  
Grafanaは多種多様なグラフやチャートを提供し、データを視覚的に理解しやすくします。  
ダッシュボードをカスタマイズし、重要なメトリクスを一目で確認できるように設定できます。

3\. アラート設定と通知:  
Grafanaのアラート機能を使用することで、特定の条件が満たされた場合に通知を受け取ることができます。  
これにより、システムの異常を見逃すことなく、迅速に対応することができます。

4\. 長期的なデータ分析:  
過去のデータを保存し、長期的なトレンドを分析することで、システムのパフォーマンスやリソースの使用状況を把握し、改善点を見つけることができます。

5\. オープンソースの柔軟性:  
PrometheusとGrafanaはオープンソースソフトウェアであり、自由にカスタマイズや拡張が可能です。  
コミュニティのサポートも活用できます。

### 連携設定の実例とベストプラクティス

PrometheusとGrafanaの連携設定を実際のプロジェクトでどのように行うかについて、具体例を挙げて説明します。

1\. メトリクスの収集:  
Webアプリケーションのパフォーマンスを監視するために、HTTPリクエストのメトリクスを収集します。  
以下は、Prometheusクライアントライブラリを使用してHTTPリクエストのカウントを増やす例です。

```
   use Prometheus\CollectorRegistry;
   use Prometheus\Storage\InMemory;

   $registry = new CollectorRegistry(new InMemory());
   $counter = $registry->getOrRegisterCounter('app', 'http_requests_total', 'Total number of HTTP requests', ['method', 'endpoint', 'status_code']);
   $counter->inc(['GET', '/home', 200]);
   
```

2\. ダッシュボードの作成:  
Grafanaで新しいダッシュボードを作成し、HTTPリクエストのメトリクスを表示するパネルを追加します。

```
   {
     "panels": [
       {
         "title": "HTTP Requests",
         "type": "graph",
         "targets": [
           {
             "expr": "sum(rate(http_requests_total[5m]))",
             "legendFormat": "{{method}} {{endpoint}}",
             "refId": "A"
           }
         ],
         "colors": ["#00ff00", "#ff0000"]
       }
     ]
   }
   
```

3\. アラートの設定:  
HTTPリクエストのエラーレートが一定の閾値を超えた場合に通知を受け取るアラートを設定します。

```
   groups:
   - name: http_alerts
     rules:
     - alert: HighErrorRate
       expr: rate(http_requests_total{status_code=~"5.."}[5m]) > 0.05
       for: 10m
       labels:
         severity: critical
       annotations:
         summary: "High error rate detected"
         description: "Error rate for HTTP requests has exceeded 5% for the last 10 minutes."
   
```

このように、PrometheusとGrafanaを連携させることで、システムの監視とデータの視覚化が効率的に行えるようになります。

### 運用中のトラブルシューティングと最適化

PrometheusとGrafanaを運用する中で発生する可能性のあるトラブルと、その解決方法について解説します。

1\. データが収集されない:  
Prometheusがデータを収集しない場合、設定ファイルやエクスポーターのステータスを確認します。  
エクスポーターが正しく動作しているか、Prometheusが正しいエンドポイントをスクレイプしているかを確認します。

```
   curl http://localhost:9090/targets
   
```

 このコマンドで、Prometheusがスクレイプしているターゲットのステータスを確認できます。

2\. ダッシュボードが更新されない:  
Grafanaのダッシュボードが期待通りに更新されない場合、データソースの設定やクエリを再確認します。  
また、Grafanaのログを確認し、エラーが発生していないか確認します。

```
   journalctl -u grafana-server
   
```

3\. パフォーマンスの問題:  
PrometheusやGrafanaのパフォーマンスに問題がある場合、リソースの使用状況を確認し、必要に応じて設定を調整します。  
例えば、Prometheusのデータ保持期間を短くすることで、ストレージの使用量を減らすことができます。

```
   storage.tsdb.retention.time: 15d
   
```

これらのトラブルシューティング手順を踏むことで、PrometheusとGrafanaの運用を最適化し、安定したシステム監視を実現できます。

### セキュリティ考慮とベストプラクティス

PrometheusとGrafanaの連携において、セキュリティを確保するためのベストプラクティスについて説明します。

1\. 認証と認可:  
PrometheusおよびGrafanaに対して適切な認証と認可を設定し、不正アクセスを防止します。  
Grafanaでは、ユーザーごとにアクセス権限を設定できます。

2\. HTTPSの利用:  
データの通信においてHTTPSを使用することで、データの盗聴や改ざんを防止します。  
PrometheusおよびGrafanaの設定ファイルでHTTPSを有効にします。

```
   - job_name: 'prometheus'
     static_configs:
       - targets: ['localhost:9090']
     tls_config:
       ca_file

: /path/to/ca.crt
       cert_file: /path/to/prometheus.crt
       key_file: /path/to/prometheus.key
   
```

3\. ネットワークセグメンテーション:  
PrometheusおよびGrafanaサーバーを専用のネットワークセグメントに配置し、外部からのアクセスを制限します。  
ファイアウォールやセキュリティグループを使用して、許可されたIPアドレスのみがアクセスできるようにします。

4\. 監査ログの有効化:  
監査ログを有効にし、システムへのアクセスや操作の履歴を記録します。  
これにより、不正な操作が発生した場合に迅速に対応できます。

```
logger:
  level: info
  format: json
audit_log:
  enabled: true
  path: /var/log/grafana/audit.log
```

これらのセキュリティ対策を実施することで、PrometheusとGrafanaの運用におけるセキュリティを強化し、安全なシステム監視を実現します。

## Grafanaを用いたログ監視のベストプラクティスとその実装方法

Grafanaは強力なデータ視覚化ツールであり、ログ監視においてもその能力を発揮します。  
ログの可視化と監視を効果的に行うためには、いくつかのベストプラクティスに従うことが重要です。  
本セクションでは、Grafanaを用いたログ監視のベストプラクティスとその具体的な実装方法について説明します。

### ログ監視のためのGrafanaダッシュボードの設計

効果的なログ監視を行うためのGrafanaダッシュボードの設計は非常に重要です。  
以下のポイントに注意してダッシュボードを設計します。

1\. クリアなレイアウト:  
ダッシュボードは、最も重要な情報が一目でわかるようにレイアウトを設計します。  
各パネルの配置やサイズに注意を払い、ユーザーが直感的に操作できるようにします。

2\. 重要なメトリクスの強調:  
ログ監視において重要なメトリクスを強調します。  
例えば、エラーレート、レスポンスタイム、リソース使用率などの重要な指標を目立つ位置に配置します。

3\. フィルタリングとインタラクティブ性:  
ユーザーが特定の時間範囲やログレベルでデータをフィルタリングできるように、インタラクティブなフィルターを設置します。  
これにより、問題の特定が容易になります。

例として、以下のようなダッシュボードを設計します。

```
{
  "panels": [
    {
      "title": "Error Rate",
      "type": "graph",
      "targets": [
        {
          "expr": "sum(rate(http_requests_total{status_code=~'5..'}[5m]))",
          "legendFormat": "Error Rate",
          "refId": "A"
        }
      ],
      "gridPos": { "x": 0, "y": 0, "w": 12, "h": 9 }
    },
    {
      "title": "CPU Usage",
      "type": "stat",
      "targets": [
        {
          "expr": "100 - avg by (instance) (irate(node_cpu{mode='idle'}[5m])) * 100",
          "legendFormat": "CPU Usage",
          "refId": "B"
        }
      ],
      "gridPos": { "x": 12, "y": 0, "w": 12, "h": 9 }
    },
    {
      "title": "Response Time",
      "type": "graph",
      "targets": [
        {
          "expr": "histogram_quantile(0.95, sum(rate(http_request_duration_seconds_bucket[5m])) by (le))",
          "legendFormat": "95th Percentile",
          "refId": "C"
        }
      ],
      "gridPos": { "x": 0, "y": 9, "w": 24, "h": 9 }
    }
  ]
}
```

このダッシュボードでは、エラーレート、CPU使用率、レスポンスタイムを表示しています。  
これにより、システムのパフォーマンスと安定性を監視できます。

### 効果的なアラート設定と通知方法

Grafanaを用いたログ監視において、効果的なアラート設定と通知は不可欠です。  
異常が発生した際に迅速に対応するためのアラート設定方法を説明します。

1\. アラートルールの定義:  
Grafanaでアラートルールを定義し、特定の条件が満たされた場合にアラートをトリガーします。  
例えば、エラーレートが一定の閾値を超えた場合にアラートを発する設定を行います。

```
   {
     "alertRule": {
       "name": "High Error Rate",
       "conditions": [
         {
           "evaluator": { "type": "gt", "params": [0.05] },
           "operator": { "type": "and" },
           "query": { "model": { "expr": "sum(rate(http_requests_total{status_code=~'5..'}[5m]))", "refId": "A" }, "reducer": { "type": "avg" } },
           "type": "query"
         }
       ],
       "for": "5m",
       "labels": { "severity": "critical" },
       "annotations": {
         "summary": "High error rate detected",
         "description": "The error rate has exceeded 5% for the last 5 minutes."
       }
     }
   }
   
```

2\. 通知チャネルの設定:  
アラートがトリガーされた際に通知を受け取るためのチャネルを設定します。  
Grafanaでは、メール、Slack、PagerDutyなど多様な通知チャネルを設定できます。

```
   {
     "name": "Slack",
     "type": "slack",
     "settings": {
       "url": "https://hooks.slack.com/services/XXXX/YYYY/ZZZZ",
       "channel": "#alerts",
       "username": "Grafana",
       "icon_emoji": ":grafana:"
     }
   }
   
```

3\. アラートの管理:  
アラートの履歴を管理し、発生したアラートに対する対応状況を記録します。  
これにより、過去のトラブルシューティングの参考にすることができます。

### PrometheusとGrafanaを用いたログ監視の具体例

PrometheusとGrafanaを組み合わせたログ監視の具体例をいくつか紹介します。  
これにより、どのようにして効果的な監視を実現するかを理解できます。

1\. HTTPリクエストの監視:  
WebサーバーのHTTPリクエストを監視し、エラーレートやレスポンスタイムをリアルタイムで追跡します。

```
   scrape_configs:
   - job_name: 'web_server'
     static_configs:
       - targets: ['localhost:8080']
   
```

 Prometheusで収集したデータをGrafanaで視覚化し、以下のようなクエリを使用します。

```
   sum(rate(http_requests_total{status_code=~'5..'}[5m])) by (status_code)
   
```

2\. システムリソースの監視:  
Node Exporterを使用してシステムリソース（CPU、メモリ、ディスク）の使用状況を監視します。

```
   scrape_configs:
   - job_name: 'node_exporter'
     static_configs:
       - targets: ['localhost:9100']
   
```

 以下のクエリをGrafanaで使用して、CPU使用率を監視します。

```
   100 - avg by (instance) (irate(node_cpu{mode='idle'}[5m])) * 100
   
```

3\. アプリケーションログの監視:  
アプリケーションのログを監視し、特定のエラーメッセージやイベントを検出します。  
Promtailを使用してログを収集し、Lokiに送信します。

```
   server:
     http_listen_port: 3100
   positions:
     filename: /tmp/positions.yaml
   clients:
     - url: http://localhost:3100/loki/api/v1/push
   scrape_configs:
     - job_name: system
       static_configs:
         - targets:
             - localhost
           labels:
             job: varlogs
             __path__: /var/log/*.log
   
```

 GrafanaでLokiをデータソースとして追加し、以下のクエリを使用してエラーログを検索します。

```
   {job="varlogs"} |= "ERROR"
   
```

これらの具体例を通じて、PrometheusとGrafanaを用いたログ監視の実装方法とその効果を理解することができます。

### トラブルシューティングとパフォーマンスの最適化

Grafanaを用いたログ監視において発生する可能性のある問題と、その解決方法について説明します。  
また、パフォーマンスを最適化するためのヒントも紹介します。

1\. データの遅延:  
データの更新が遅れる場合、Prometheusのスクレイピング間隔やGrafanaのダッシュボードのリフレッシュレートを調整します。  
また、ネットワークの帯域幅やサーバーの

負荷も確認します。

```
   scrape_interval: 15s
   
```

2\. メモリの使用量:  
PrometheusやGrafanaが大量のメトリクスを処理する際にメモリを大量に消費する場合、不要なメトリクスをフィルタリングするか、リソースの増強を検討します。

```
   metric_relabel_configs:
     - source_labels: [__name__]
       regex: "unnecessary_metric.*"
       action: drop
   
```

3\. ダッシュボードのパフォーマンス:  
Grafanaのダッシュボードが重くなる場合、パネル数を減らすか、クエリを最適化します。  
また、ダッシュボードのキャッシングを有効にすることも有効です。

```
   {
     "cacheTimeout": "5m"
   }
   
```

これらのトラブルシューティングと最適化の手法を用いることで、Grafanaを用いたログ監視システムのパフォーマンスを維持し、効果的な監視を実現できます。

## PrometheusとGrafanaの違いを理解して最適なツールを選択する方法

PrometheusとGrafanaは共に監視ツールとして非常に優れていますが、それぞれに異なる特長があります。  
これらの違いを理解することで、プロジェクトに最適なツールを選択することができます。  
本セクションでは、PrometheusとGrafanaの違いを詳しく解説し、最適なツールの選び方について説明します。

### Prometheusの特長と適用例

Prometheusは、主にメトリクスの収集とアラート機能に特化した監視ツールです。  
その特長と適用例について以下に示します。

1\. メトリクスの収集:  
Prometheusは、定期的にターゲットからメトリクスを収集するプル型のデータ収集方式を採用しています。  
これにより、詳細な監視が可能です。

2\. 高いスケーラビリティ:  
Prometheusは大規模なインフラストラクチャを監視するために設計されており、複数のインスタンスをクラスタリングすることでスケーラビリティを確保します。

3\. 強力なアラート機能:  
内蔵のAlertmanagerを使用して、複雑なアラートルールを設定し、異常が発生した際に通知を行うことができます。

4\. タイムシリースデータベース:  
Prometheusは専用のタイムシリースデータベースを持ち、効率的なデータ保存とクエリ処理が可能です。

適用例:  
– 大規模なクラウドインフラストラクチャの監視  
– マイクロサービスアーキテクチャの監視  
– データセンターの監視

### Grafanaの特長と適用例

Grafanaは、データの視覚化とダッシュボードの作成に特化したツールです。  
その特長と適用例について以下に示します。

1\. 多様なデータソースのサポート:  
Grafanaは、Prometheusをはじめ、Elasticsearch、InfluxDB、Lokiなど多数のデータソースをサポートしており、異なるデータソースを統合して視覚化できます。

2\. 強力なダッシュボード機能:  
ユーザーフレンドリーなインターフェースを持ち、簡単にカスタマイズ可能なダッシュボードを作成できます。  
パネル、グラフ、チャートなど多彩な視覚化オプションが利用可能です。

3\. インタラクティブなフィルタリングとドリルダウン:  
ユーザーはダッシュボード上でデータをフィルタリングしたり、ドリルダウンして詳細を確認することができます。

4\. アラート機能:  
Grafanaは、視覚化されたデータに基づいてアラートを設定し、異常が検出された場合に通知を送信できます。

適用例:  
– ビジネスインテリジェンスダッシュボード  
– リアルタイムのアプリケーションパフォーマンス監視  
– ITオペレーションの視覚化

### PrometheusとGrafanaの違いを理解する

PrometheusとGrafanaの主な違いを理解することが重要です。  
それぞれのツールが得意とする分野を把握することで、プロジェクトに最適なツールを選択することができます。

| 特徴       | Prometheus          | Grafana             |
| -------- | ------------------- | ------------------- |
| 目的       | メトリクス収集とアラート        | データの視覚化とダッシュボードの作成  |
| データ収集方式  | プル型                 | プッシュ型もサポート          |
| データ保存    | 専用のタイムシリースデータベース    | 外部データベースを利用         |
| アラート機能   | 強力なAlertmanagerを内蔵  | 視覚化されたデータに基づくアラート機能 |
| スケーラビリティ | 高い                  | 中程度                 |
| データソース   | 主にPrometheusエクスポーター | 多様なデータソースをサポート      |

### プロジェクトに最適なツールを選択する方法

プロジェクトに最適なツールを選択するためのガイドラインを以下に示します。

1\. 監視の目的を明確にする:  
監視の目的に応じてツールを選択します。  
メトリクス収集とアラートが主な目的であればPrometheusを、データの視覚化とダッシュボード作成が主な目的であればGrafanaを選択します。

2\. データソースの種類を確認する:  
監視対象のデータソースを確認します。  
複数のデータソースを統合して視覚化する必要がある場合はGrafanaが適しています。

3\. スケーラビリティの要件を考慮する:  
大規模なインフラストラクチャを監視する場合は、スケーラビリティの高いPrometheusが適しています。  
一方、スモールスケールの監視であれば、Grafanaも十分対応可能です。

4\. アラート機能の重要性:  
複雑なアラートルールが必要な場合は、PrometheusのAlertmanagerを利用することが推奨されます。  
基本的なアラート機能で十分であれば、Grafanaのアラート機能でも対応可能です。

5\. 視覚化のニーズ:  
データの視覚化が重要な場合は、Grafanaを選択することで多彩なダッシュボードを作成できます。

これらのガイドラインに従い、プロジェクトの要件に最適なツールを選択することで、効果的な監視システムを構築することができます。

## Prometheusのログ出力先の設定方法とトラブルシューティングガイド

Prometheusのログ出力は、システムの運用状況を把握するために重要です。  
適切なログ出力先の設定と、トラブルシューティングの方法について詳しく解説します。

### Prometheusのログ出力先の設定方法

Prometheusのログ出力先を設定するための手順を以下に示します。

1\. デフォルトのログ出力先:  
Prometheusはデフォルトで標準出力（stdout）にログを出力します。  
この設定は、シンプルな運用環境では有効ですが、より詳細なログ管理が必要な場合は、ファイルにログを出力することが推奨されます。

2\. ログファイルへの出力:  
Prometheusの起動オプションを使用して、ログをファイルに出力する設定を行います。  
以下は、ログ出力先をファイルに設定する例です。

```
   ./prometheus --config.file=prometheus.yml --log.level=info --log.format=logfmt --log.output=prometheus.log
   
```

 この設定により、\`prometheus.log\`ファイルにログが出力されます

。

3\. ログローテーションの設定:  
ログファイルが大きくなりすぎないように、ログローテーションを設定します。  
logrotateツールを使用して、ログファイルのローテーションを管理します。

```
   /var/log/prometheus.log {
       daily
       missingok
       rotate 14
       compress
       delaycompress
       notifempty
       create 0640 prometheus prometheus
       sharedscripts
       postrotate
           /bin/kill -HUP `cat /var/run/prometheus/prometheus.pid 2>/dev/null` 2>/dev/null || true
       endscript
   }
   
```

### ログ出力のカスタマイズとフィルタリング

Prometheusのログ出力をカスタマイズし、必要な情報のみを収集する方法を説明します。

1\. ログレベルの設定:  
Prometheusの起動オプションでログレベルを設定します。  
\`–log.level\`オプションを使用して、\`debug\`、\`info\`、\`warn\`、\`error\`のいずれかを指定します。

```
   ./prometheus --log.level=debug
   
```

 この設定により、デバッグレベルの詳細なログが出力されます。

2\. 特定のログメッセージのフィルタリング:  
不要なログメッセージをフィルタリングするために、外部ツールを使用することができます。  
例えば、grepコマンドを使用して、特定のキーワードを含むログメッセージのみを抽出します。

```
   tail -f prometheus.log | grep "specific_keyword"
   
```

### ログ解析とトラブルシューティングの手法

Prometheusのログを解析し、トラブルシューティングを行うための手法を説明します。

1\. ログファイルの解析:  
ログファイルを解析することで、システムの異常やエラーの原因を特定します。  
以下は、エラーメッセージを検索するコマンドの例です。

```
   grep "level=error" prometheus.log
   
```

 このコマンドは、ログファイルからエラーメッセージを抽出します。

2\. メトリクスの確認:  
Prometheusのメトリクスを確認し、異常が発生している部分を特定します。  
特に、\`up\`メトリクスを確認することで、ターゲットが正常に稼働しているかをチェックします。

```
   up{job="your_job_name"}
   
```

3\. Prometheusサーバーのステータス確認:  
Prometheusサーバーのステータスページ（http://localhost:9090/status）を確認し、メトリクスのスクレイピング状況やアラートの状態を確認します。

4\. ログの可視化:  
GrafanaやKibanaなどのログ可視化ツールを使用して、ログデータを視覚的に解析します。  
これにより、トレンドや異常を直感的に把握できます。

### よくある問題とその解決策

Prometheusの運用中によく発生する問題とその解決策を以下に示します。

1\. データの欠落:  
特定の期間のデータが欠落している場合、スクレイピング間隔やターゲットの可用性を確認します。  
また、Prometheusサーバーのリソース使用状況をチェックし、必要に応じて設定を調整します。

```
   scrape_interval: 15s
   scrape_timeout: 10s
   
```

2\. 高いメモリ使用量:  
Prometheusのメモリ使用量が高くなった場合、不要なメトリクスをフィルタリングし、データ保持期間を短縮します。

```
   storage.tsdb.retention.time: 30d
   
```

3\. アラートが発生しない:  
アラートが期待通りに発生しない場合、アラートルールの設定を確認し、Prometheusのログをチェックします。  
特に、アラートルールの条件が適切に設定されているかを確認します。

```
   alerting:
     alertmanagers:
       - static_configs:
           - targets:
             - localhost:9093
   
```

これらの解決策を実施することで、Prometheusのログ出力先の設定とトラブルシューティングを効率的に行うことができます。

## よくある質問

### LaravelでPrometheus用のメトリクスを収集するには何が必要ですか？

Composerで`promphp/prometheus_client_php`を導入し、CounterやHistogramなどのメトリクスを定義してアプリのコードから記録します。記録した値を`/metrics`のようなエンドポイントで公開し、Prometheusにスクレイピングさせる構成が基本です。

### PrometheusとGrafanaの違いは何ですか？

Prometheusはメトリクスを収集・保存し、クエリ言語PromQLで問い合わせる時系列データベース兼監視ツールです。監視基盤側の構築手順とPromQLの型合わせは[Prometheusで監視を構築する手順](https://www.issoh.co.jp/tech/details/17516/)で解説しています。Grafanaはそのデータソースを参照して折れ線グラフやダッシュボードとして可視化し、アラートを表示する役割を担います。両者は競合ではなく、収集をPrometheus、可視化をGrafanaが担う組み合わせで使うのが一般的です。

マネージドPaaS上ではCPUやメモリの基本メトリクスが既定で見られるため、自前で集める範囲を絞れます。常駐型で動かす場合に監視すべきワーカーのメモリ推移は[Laravel Octaneとは｜ワーカー常駐の仕組みと状態リーク・採用条件](https://www.issoh.co.jp/tech/details/17131/)にまとめました。既定で入る監視の範囲は[Laravel Cloudとは｜構成・料金・ForgeとVaporの違いと受託での採用条件](https://www.issoh.co.jp/tech/details/17123/)にまとめました。

### GrafanaでLaravelのメトリクスを可視化する手順は？

GrafanaのデータソースにPrometheusを追加し、パネルのクエリでLaravelが公開したメトリクス名（例：`http_requests_total`）を指定します。リクエスト数やレスポンス時間のパネルを並べたダッシュボードを作成すれば、アプリの稼働状況を一画面で確認できます。

### Prometheusのログ出力先やログレベルはどう設定しますか？

Prometheus本体は起動オプション`--log.level`（debug/info/warn/error）と`--log.format`で出力の詳細度と形式を指定します。ログ本体の集約・可視化まで行いたい場合は、Prometheus由来の設計を持つログ基盤Grafana Lokiと組み合わせる構成が使われます。なお、Laravelアプリ自身がどこへ何を書き出すか（チャンネル設計・保持期間・個人情報のマスキング）はフレームワーク側の設定で決まります。その設計は[Laravelのログ設定｜logging.phpのチャンネル設計と保持期間・マスキング](https://www.issoh.co.jp/tech/details/17156/)で整理しています。

### 収集したメトリクスからアラートを通知するには？

Prometheusのalerting rulesでしきい値条件を定義し、Alertmanagerからメールやチャットに通知します。Grafana側のアラート機能でパネル単位に条件と通知先を設定する方法もあり、既存のダッシュボードから運用したい場合はGrafanaアラートが扱いやすいです。

## 関連記事

- [Laravel Telescopeとは何か？その機能と重要性を徹底解説](https://www.issoh.co.jp/tech/details/3386/)
- [Laravel Debugbarでデータベースクエリのパフォーマンスを分析する方法](https://www.issoh.co.jp/tech/details/4473/)
- [Grafana Lokiとは何か：Prometheus由来の設計でコスト効率に優れたログ基盤を徹底解説](https://www.issoh.co.jp/tech/details/9570/)
- [Amazon Managed Grafanaとは？機能・料金・データソースと始め方](https://www.issoh.co.jp/tech/details/4540/)
- [オブザーバビリティとは何か：その定義と重要性について](https://www.issoh.co.jp/column/details/3077/)

---

出典: [LaravelでPrometheusとGrafana監視を実装：メトリクス収集・可視化・アラート設定](<https://www.issoh.co.jp/tech/details/2932/>)（株式会社一創）
