本文转载于个人博客:https://docs.wziqi.vip/
前言
Grafana:提供 Loki 中捕获的日志行的可视化与搜索平台。
Loki :是日志记录存储与检索引擎。
Promtail:做为日志采集器,从 flog 中抓取日志行,并通过网关将它们推送给 Loki。
Promtail:是运行环境的代理(或客户端),它捕获日志行并通过网关将它们推送到 Loki 集群,
在典型环境中,生成日志的应用程序和代理一起运行,但位置与 Loki 集群不同。Grafana 提供了一种对 Loki 中存储的日志进行查询并可视化查询结果的方法。
第一步安装 Loki
简单介绍下Loki:
Grafana Loki 是一个日志聚合工具,它是功能齐全的日志堆栈的核心。
Loki 是一个为有效保存日志数据而优化的数据存储。日志数据的高效索引将 Loki 与其他日志系统区分开来,
与其他日志系统不同,Loki 索引是根据标签构建的,原始日志消息未编入索引。
1.1 切换到工作目录下,如果自己创建的不是这个目录下边启动容器的映射也得改
mkdir -p /etc/loki/conf && cd /etc/loki/conf && chmod 0777 -R /etc/loki
1.2 下载配置文件
wget https://raw.githubusercontent.com/grafana/loki/master/cmd/loki/loki-local-config.yaml
1.3 配置文件详解
auth_enabled: false # 是否启用鉴权
server:
http_listen_port: 3100 #http访问端口
grpc_listen_port: 9096 #rpc访问端口
common:
path_prefix: /tmp/loki #loki
storage:
filesystem:
chunks_directory: /tmp/loki/chunks #记录块存储目录,默认chunks块上的日志数量或到期后,将chunks数据打标签后存储
rules_directory: /tmp/loki/rules #规则配置目录
replication_factor: 1
ring:
instance_addr: 192.168.1.1 #修改为自己的IP或localhost
kvstore:
store: inmemory
query_range: #查询规则
results_cache: #结果缓存
cache:
# embedded_cache: #默认开启后会有提示,未配置缓存项,暂不开启
# enabled: true
# distributed: true
# max_size_mb: 100
schema_config: #配置索引信息
configs:
- from: 2020-10-24
store: boltdb-shipper
object_store: filesystem
schema: v11
index:
prefix: index_ #索引前缀
period: 24h #索引时长
ruler:
alertmanager_url: http://192.168.1.1:9093 #告警通知url,修改为自己的IP
1.4 启动服务
docker run -d --name loki --privileged=true \
--restart always -p 3100:3100 -p 9096:9096 \
-e TZ="Asia/Shanghai" -m 512m \
-v /etc/localtime:/etc/localtime:ro \
-v /usr/share/zoneinfo/:/usr/share/zoneinfo/:ro \
-v /etc/loki/conf:/mnt/config grafana/loki:2.8.2 \
-config.file=/mnt/config/loki-local-config.yaml
第二步安装 Promtail
2.1 切换到工作目录下,如果自己创建的不是这个目录下边启动容器的映射也得改
cd /etc/loki/conf
2.2 下载配置文件
wget https://raw.githubusercontent.com/grafana/loki/main/clients/cmd/promtail/promtail-local-config.yaml
2.3 配置文件详解
server:
http_listen_port: 9080
grpc_listen_port: 0
positions:
filename: /tmp/positions.yaml #用于记录每次读取日志文件的索引行数,如:promtail重启后从该配置中恢复日志文件的读取位置
clients:
- url: http://192.168.1.1:3100/loki/api/v1/push #推送日志流到Loki中的api
scrape_configs: #发现日志文件的位置并从中提取标签
- job_name: bbb #任务名称
static_configs: # 目录配置
- targets: # 标签
- 192.168.1.1
labels:
job: bbb #子任务名称,通常以项目命令
__path__: /var/log/*log #要读取的日志文件的位置,允许使用通配符/*log或/**/*.log
- job_name: aaa # 读取多个项目的日志文件
static_configs:
- targets:
- 192.168.1.1
labels:
job: aaa
__path__: /var/log/test/aaa.log # 定义不同的日志文件路径
2.4 创建服务
docker run -d --name promtail --privileged=true \
--restart always -e TZ="Asia/Shanghai" -m 512m \
-v /etc/localtime:/etc/localtime:ro \
-v /etc/loki/conf/:/mnt/config -v /var/log:/var/log \
grafana/promtail:2.8.2 \
-config.file=/mnt/config/promtail-config.yaml
第三步安装granafa
3.1 创建工作目录并加权
chmod -R 0777 /etc/loki/grafana-storage
3.2 创建服务
docker run -d -p 3000:3000 --name=grafana -m 512m \
-v /etc/loki/grafana-storage:/var/lib/grafana grafana/grafana
3.3 浏览器访问 IP:3000 (安全组记得开这个端口)
默认用户名和密码:admin/admin
3.4 修改为中文
3.5 添加loki插件
上方正则筛选日志介绍
对于查询表达式的标签部分,将放在 {} 中,多个标签表达式用逗号分隔:
{app="mysql",name="mysql-backup"}
支持的符号有:
\=:完全相同。
!=:不平等。
\=~:正则表达式匹配。
!~:不要正则表达式匹配。
过滤表达式
编写日志流选择器后,您可以通过编写搜索表达式进一步过滤结果。搜索表达式可以文本或正则表达式。
如:
{job=“mysql”} |= “error”
{name=“kafka”} |~ “tsdb-ops.*io:2003”
{instance=~“kafka-[23]”,name=“kafka”} != kafka.server:type=ReplicaManager
支持多个过滤:
{job=“mysql”} |= “error” != “timeout”
目前支持的操作符:
|= line 包含字符串。
!= line 不包含字符串。
|~ line 匹配正则表达式。
!~ line 与正则表达式不匹配。