Promtail+Loki+Grafana搭建轻量级日志管理平台

1. 简介

  现在几乎所有的服务都是分布式部署,在定位环境问题时,往往需要在不同的主机上查看日志,并且对于某些行业来说,客户不能接受通过远程登录服务器查看日志。因此,需要一个统一的日志管理平台,可以集中查看日志,并对日子进行过滤、检索、定期清除等。

2. 技术选型

  集成日志采集、存储、展示功能的管理平台有很多成熟的解决方案,例如:Logstash + Elasticsearch + KibanaFileBeat/Fluentd + Elasticsearch + KibanaPromtail + Loki + Grafana
  如果需求复杂,服务器资源不受限制,推荐使用ELK(Logstash + Elasticsearch + Kibana)方案;如果需求仅是将不同服务器上的日志采集上来集中展示,且需要一个轻量级的框架,那使用PLG(Promtail + Loki + Grafana)最合适不过了。
  各组件官网:

3. 相关博客

  SpringBoot 2.x + Prometheus + Grafana 实现应用监控

4. 安装

  本博客使用的PromtailLoki版本为:2.6.1,Grafana版本为:8.0.7。安装环境为:Linux x86_64。

  • 下载介质和配置文件
组件 下载地址 配置文件地址
Promtail https://github.com/grafana/loki/releases/download/v2.6.1/promtail-linux-arm64.zip https://github.com/grafana/loki/blob/v2.6.1/clients/cmd/promtail/promtail-local-config.yaml
Loki https://github.com/grafana/loki/releases/download/v2.6.1/loki-linux-arm64.zip https://github.com/grafana/loki/blob/v2.6.1/cmd/loki/loki-local-config.yaml
Grafana https://dl.grafana.com/enterprise/release/grafana-enterprise-8.0.7.linux-amd64.tar.gz
  • 创建安装目录
mkdir -p /usr/local/log-manager/promtail
mkdir -p /usr/local/log-manager/loki
mkdir -p /usr/local/log-manager/grafana
server:
  http_listen_port: 9080
  grpc_listen_port: 0

# 保存采集日志的位置信息的文件
positions:
  filename: /usr/local/log-manager/promtail/tmp/positions.yaml

# Loki接收日志接口
clients:
  - url: http://localhost:3100/loki/api/v1/push

scrape_configs:
  - job_name: tomcat
    pipeline_stages:
	# 合并行配置
    - multiline:
        firstline: ^(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})
        max_wait_time: 3s
        max_lines: 500
    - match:
        selector: '{job="tomcat"}'
        stages:
		# 日志过滤,删除DEBUG级别日志
        - drop:
            expression: ".*DEBUG.*"
    static_configs:
    - targets:
        - localhost
      labels:
        job: tomcat   # 给日志富化的标签
        node: node1   # 给日志富化的标签
		# 采集的日志路径
        __path__: /usr/local/tomcat/logs/catalina.out
		# 排除的日志路径
		__path_exclude__: /usr/local/tomcat/logs/{localhost,catalina}.*.log
# 需要运行的组件,默认all。测试中发现,定期删除日志记录需要额外指定:table-manager
target: "all,table-manager"

auth_enabled: false

server:
  http_listen_port: 3100
  grpc_listen_port: 9096

# 配置Loki存储数据路径
common:
  path_prefix: /usr/local/loki/data
  storage:
    filesystem:
      chunks_directory: /usr/local/loki/data/chunks
      rules_directory: /usr/local/loki/data/rules
  replication_factor: 1
  ring:
    instance_addr: 127.0.0.1
    kvstore:
      store: inmemory

schema_config:
  configs:
    - from: 2020-10-24
      store: boltdb-shipper
      object_store: filesystem
      schema: v11
	  # 每24小时存储一个索引目录
      index:
        prefix: index_
        period: 24h
      chunks:
        prefix: chunk_
        period: 24h

storage_config:
  boltdb_shipper:
    active_index_directory: /usr/local/loki/data/boltdb/boltdb-shipper-active
    cache_location: /usr/local/loki/data/boltdb/boltdb-shipper-cache
    cache_ttl: 24h
    shared_store: filesystem
 
compactor:
  working_directory: /usr/local/loki/data/boltdb/boltdb-shipper-compactor
  shared_store: filesystem

# 限制配置
limits_config:
  # 拒绝历史数据开关
  reject_old_samples: true
  # 拒绝历史数据最大时长
  reject_old_samples_max_age: 168h

# 表管理配置
table_manager:
  # 删除历史数据开关
  retention_deletes_enabled: true
  # 删除历史数据时长,不能大于:limits_config.reject_old_samples_max_age
  # 实际上保留时长:(table_manager.retention_period + schema_config.config.chunk.period) <= 保留时长 < (table_manager.retention_period + schema_config.config.chunk.period + 12h)
  retention_period: 168h
# alert-manager组件,不涉及
ruler:
  alertmanager_url: http://localhost:9093
  • 将配置文件和介质分布上传到对应的目录,并授权
# Promtail -> /usr/local/log-manager/promtail
# Loki ->/usr/local/log-manager/loki
# Grafana ->/usr/local/log-manager/grafana

chmod -R 755 /usr/local/log-manager/*
  • 启动LokiPromtail
      一定先启动Loki再启动Promtail
nohup /usr/local/log-manager/loki/loki-linux-amd64 -config.file=/usr/local/log-manager/loki/loki-local-config.yaml >/dev/null 2>/usr/local/log-manager/loki/logs/loki.log 2>&1 &

nohup /usr/local/log-manager/promtail/promtail-linux-amd64 -config.file=/usr/local/log-manager/promtail/promtail-local-config.yaml > /usr/local/log-manager/promtail/logs/promtail.log 2>&1 &
  • 启动Grafana
cd /usr/local/log-manager/grafana && tar -zxvf grafana-enterprise-8.0.7.linux-amd64.tar.gz

nohup /usr/local/log-manager/grafana/grafana-8.0.7/bin/grafana-server > /dev/null 2>&1 &
  • 停止各个组件
      如果重启了Loki,必须同时重启Promtail。如果仅重启Promtail,可以不重启Loki
# 停止Promtail
ps -ef | grep promtail | grep promtail-local-config.yaml | grep -v grep | awk '{print $2}'

kill -9 xxx

# 停止Loki
ps -ef | grep loki | grep loki-local-config.yaml | grep -v grep | awk '{print $2}'

kill -9 xxx

# 停止Grafana
ps -ef | grep grafana-server

kill -9 xxx

5. 配置Grafana数据源

posted @ 2023-01-20 15:27  C3Stones  阅读(5413)  评论(0编辑  收藏  举报