マイクロサービスアーキテクチャにおいて、各サービスのログ管理とモニタリングは、システムの可観測性を高めるために重要です。今回は、マイクロサービスのログ管理とモニタリングについて記述します。
目次
- ログ管理の基本
- ログ集約と解析ツールの導入
- モニタリングツールの設定
- 実践プロジェクトの例
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. 実践プロジェクトの例
プロジェクト:ログ管理とモニタリング
- ELKスタックを使用してログの集約と解析を実現
- Filebeatを使用してLaravelのログをLogstashに送信
- PrometheusとGrafanaを使用してシステムメトリクスを収集・可視化
まとめ
この記事では、マイクロサービスのログ管理とモニタリングについて記述しました。ELKスタックを使用してログを集約し、PrometheusとGrafanaを使用してシステムメトリクスを可視化する方法を学びました。これらの手法を駆使して、システムの可観測性を高め、迅速なトラブルシューティングとパフォーマンスの最適化を目指します。