本文章旨在指导如何使用轻量级日志引擎Loki来采集Kubernetes的应用日志,并展示在grafana中。
背景
最近我们公司的项目上了Kubernetes集群,产生的大量应用的日志需要采集起来,便于溯源问题、跟踪问题和及时报警。考虑到ELK那一套框架实在太大了,所以我们采用了更轻量化,更便捷部署和维护的Loki+grafana。
新建Loki服务
这里考虑到Loki服务需要持久化存储数据,我就直接部署在虚拟机了。
$ curl -O -L "https://github.com/grafana/loki/releases/download/v2.7.3/loki-linux-amd64.zip
$ unzip loki-linux-amd64.zip
$ cat /etc/systemd/system/loki.service
[Unit]
Description=loki
After=network.target
[Service]
ExecStart=/data/loki/loki-linux-amd64 \
-config.file=/data/loki/loki-config.yaml &>> /data/loki/logs/loki-3100.log
Restart=on-failure
[Install]
WantedBy=multi-user.target
优化Loki服务的参数
为了避免Loki服务器出现io瓶颈,需要对Loki得参数进行优化。
$ cat loki-config.yaml
auth_enabled: false
server:
http_listen_port: 3100 #如是云服务需打开3100端口
grpc_listen_port: 9096
grpc_server_max_recv_msg_size: 8388608
grpc_server_max_send_msg_size: 8388608
ingester:
lifecycler:
address: 0.0.0.0 #监听地址,可不做修改。
ring:
kvstore:
store: inmemory
replication_factor: 1
final_sleep: 0s
chunk_idle_period: 5m
chunk_retain_period: 30s
max_transfer_retries: 0
ingester_client:
remote_timeout: 2m
schema_config:
configs:
- from: 2023-01-29
store: boltdb
object_store: filesystem
schema: v11
index:
prefix: index_
period: 168h
storage_config:
boltdb:
directory: /data/loki/index #自定义boltdb目录(在loki目录下新建data文件来存放)
filesystem:
directory: /data/loki/chunks #自定义filesystem目录(在loki目录下新建data文件来存放)
limits_config:
enforce_metric_name: false
reject_old_samples: true
reject_old_samples_max_age: 168h
#ngestion_rate_strategy: local
ingestion_rate_mb: 30
ingestion_burst_size_mb: 60
per_stream_rate_limit: 10MB
per_stream_rate_limit_burst: 20MB
max_query_length: 0h
chunk_store_config:
max_look_back_period: 0s
table_manager:
retention_deletes_enabled: false
retention_period: 180h
# service file
$ cat /etc/systemd/system/loki.service
[Unit]
Description=loki
After=network.target
[Service]
ExecStart