0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

マイクロサービスアーキテクチャにおいて、各サービスのログ管理とモニタリングは、システムの可観測性を高めるために重要です。今回は、マイクロサービスのログ管理とモニタリングについて記述します。

目次

  1. ログ管理の基本
  2. ログ集約と解析ツールの導入
  3. モニタリングツールの設定
  4. 実践プロジェクトの例

1. ログ管理の基本

ログの標準化

各マイクロサービスのログ形式を標準化することで、ログの解析とモニタリングを容易にします。LaravelではMonologを使用してログを管理します。

config/logging.php

return [
    'default' => env('LOG_CHANNEL', 'stack'),

    'channels' => [
        'stack' => [
            'driver' => 'stack',
            'channels' => ['daily', 'stderr'],
        ],

        'daily' => [
            'driver' => 'daily',
            'path' => storage_path('logs/laravel.log'),
            'level' => 'debug',
            'days' => 14,
        ],
    ],
];

2. ログ集約と解析ツールの導入

Elasticsearch, Logstash, Kibana (ELK Stack)

ELKスタックを使用して、ログの集約と解析を行います。

Elasticsearchの設定

Dockerを使用してElasticsearchを設定します。

version: '3.7'
services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.10.1
    container_name: elasticsearch
    environment:
      - discovery.type=single-node
    ports:
      - "9200:9200"

Logstashの設定

Logstashを使用してログを収集します。

logstash:
  image: docker.elastic.co/logstash/logstash:7.10.1
  container_name: logstash
  volumes:
    - ./logstash-pipeline:/usr/share/logstash/pipeline
  ports:
    - "5000:5000"

logstash-pipeline/logstash.conf

input {
  beats {
    port => 5000
  }
}

output {
  elasticsearch {
    hosts => ["elasticsearch:9200"]
    index => "logs-%{+YYYY.MM.dd}"
  }
}

Kibanaの設定

Kibanaを使用してログを可視化します。

kibana:
  image: docker.elastic.co/kibana/kibana:7.10.1
  container_name: kibana
  ports:
    - "5601:5601"
  environment:
    ELASTICSEARCH_URL: http://elasticsearch:9200

Filebeatの設定

Filebeatを使用してLaravelのログをLogstashに送信します。

filebeat:
  image: docker.elastic.co/beats/filebeat:7.10.1
  container_name: filebeat
  volumes:
    - ./filebeat.yml:/usr/share/filebeat/filebeat.yml
    - /var/log/laravel:/usr/share/filebeat/logs

filebeat.yml

filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /usr/share/filebeat/logs/*.log

output.logstash:
  hosts: ["logstash:5000"]

3. モニタリングツールの設定

PrometheusとGrafana

PrometheusとGrafanaを使用して、システムメトリクスを収集・可視化します。

Prometheusの設定

Dockerを使用してPrometheusを設定します。

prometheus.yml

global:
  scrape_interval: 15s

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']
  - job_name: 'my-service'
    static_configs:
      - targets: ['my-service:8080']

Docker ComposeでPrometheusを起動します。

version: '3.7'
services:
  prometheus:
    image: prom/prometheus
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml
    ports:
      - "9090:9090"

Grafanaの設定

Grafanaを使用してPrometheusデータを可視化します。

version: '3.7'
services:
  grafana:
    image: grafana/grafana
    ports:
      - "3000:3000"
    environment:
      - GF_SECURITY_ADMIN_PASSWORD=secret
    volumes:
      - grafana-storage:/var/lib/grafana

GrafanaでPrometheusをデータソースとして追加し、ダッシュボードを作成します。

4. 実践プロジェクトの例

プロジェクト:ログ管理とモニタリング

  1. ELKスタックを使用してログの集約と解析を実現
  2. Filebeatを使用してLaravelのログをLogstashに送信
  3. PrometheusとGrafanaを使用してシステムメトリクスを収集・可視化

まとめ

この記事では、マイクロサービスのログ管理とモニタリングについて記述しました。ELKスタックを使用してログを集約し、PrometheusとGrafanaを使用してシステムメトリクスを可視化する方法を学びました。これらの手法を駆使して、システムの可観測性を高め、迅速なトラブルシューティングとパフォーマンスの最適化を目指します。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?