1、为什么要用Loki+Promtail+Grafana:
项目采用微服务的架构,服务很多,每个服务都有自己的日志,分别存放在不同的服务器上。当查找日志时需要分别登录不同的服务器,有大量的请求的情况下,在日志文件中查找信息十分困难。想要搭建一个日志系统,ELK分布式日志系统对于中小型公司来说开发维护成本太高,经过调研,选择Loki轻量级日志系统。
2、Loki架构:
- Promtail是代理,负责收集日志并将其发送给Loki。
- Loki是主服务器,负责存储日志和处理查询。
- Grafana用于查询和显示日志,UI显示。
简言之:只要在应用程序服务器上安装promtail来收集日志然后发送给Loki存储,就可以在Grafana UI界面通过添加Loki为数据源进行日志查询(如果Loki服务器性能不够,可以部署多个Loki进行存储及查询)。作为一个日志系统不光只有查询分析日志的能力,还能对日志进行监控和报警。
3、原理分析:
- promtail收集并将日志发送给loki的 Distributor 组件
- Distributor会对接收到的日志流进行正确性校验,并将验证后的日志分批并行发送到Ingester
- Ingester 接受日志流并构建数据块,压缩后存放到所连接的存储后端
- Querier 收到HTTP查询请求,并将请求发送至Ingester 用以获取内存数据 ,Ingester 收到请求后返回符合条件的数据 ;
- 如果 Ingester 没有返回数据,Querier 会从后端存储加载数据并遍历去重执行查询 ,通过HTTP返回查询结果
4、与 ELK 比较优势
ELK虽然功能丰富,但规模复杂,资源占用高,操作苦难,很多功能往往用不上,有点杀鸡用牛刀的感觉。
loki 不对日志进行全文索引。通过存储压缩非结构化日志和索引元数据,Loki 操作起来会更简单,更省成本。
通过使用与 Prometheus 相同的标签记录流对日志进行索引和分组,这使得日志的扩展和操作效率更高。
安装部署简单快速,且受 Grafana 原生支持。
5、Linux部署
5.1、下载loki、promtail、Grafana
- Loki:
下载地址:https://github.com/grafana/loki/releases
下载包:【loki-linux-amd64.zip】
版本:v2.4.1
- Promtail:
下载地址:https://github.com/grafana/loki/releases
下载包:【promtail-linux-amd64.zip】
版本:v2.4.1
- Grafana:
下载地址:https://dl.grafana.com/oss/release/grafana-7.1.0-1.x86_64.rpm
下载包:【grafana-7.1.0-1.x86_64.rpm】
版本:v7.1.0
目前线上部署的版本替换成了7.3
下载地址:https://dl.grafana.com/oss/release/grafana-7.3.0-1.x86_64.rpm
下载包:【grafana-7.3.0-1.x86_64.rpm】
版本:v7.3.0
注意:目前Grafana没有官方的汉化包,只有一些基于官网的汉化教程可参考。
5.2、在日志服务器上部署loki和Grafana
5.2.1 安装loki
- 在日志服务器10.101.17 上创建目录:/home/admin/data、/home/admin/loki
- 将 loki-linux-amd64.zip 解压后传到/home/admin/loki下
- 将yaml 配置文件也上传到/home/admin/loki下,配置内容如下:
auth_enabledfalseserver http_listen_port3100ingester# 配置ingester的生命周期如何运行,以及它将在哪里注册以进行发现 lifecycler address 10.10.101.17 #部署loki服务器的ip ring# ring用于发现并连接到Ingesters kvstore store inmemory # 用于连接后端存储,支持的值有:consul etcd inmemory replication_factor 1 # 写入和读取的指数 final_sleep 0s chunk_idle_period 5m # 空闲时间 chunk_retain_period 30s # 保留时间schema_config configsfrom 2021-07-01 store boltdb object_store filesystem schema v11 index prefix index_ period 168h #每张表的时间范围7天storage_config boltdb directory /home/admin/data/loki/index #索引文件存储地址 filesystem directory /home/admin/data/loki/chunks #块存储地址limits_config enforce_metric_namefalse reject_old_samplestrue reject_old_samples_max_age 168h chunk_store_config# 最大可查询历史日期 28天,这个时间必须是schema_config中的period的倍数,否则报错。只适用于即时日志 max_look_back_period 672h # 表的保留期28天table_manager retention_deletes_enabledtrue retention_period 672h
5.2.2 启动loki
- 在/home/admin/loki下,输入命令:
nohup ./loki-linux-amd64 -config.file=./config.yaml >./loki.log 2>&1 &
5.2.3 安装Grafana
- 上传包到日志服务器10.101.17,路径:/home/admin
- 执行命令:rpm -ivh ./grafana-7.1.0-1.x86_64.rpm ,报错如下,没有插件依赖
- 执行命令:yum install fontconfig urw-fonts -y加载插件(注意:该命令必须用root权限)
- 再次执行命令:rpm -ivh ./grafana-7.1.0-1.x86_64.rpm(切换到admin账号后会报错,因为用rpm安装软件必须要用root权限)
如下图表示安装成功
5.2.4 启动Grafana
- 输入命令:systemctl daemon-reload(需要用root权限),该命令重新加载某个服务的配置文件,如果新安装了一个服务,归属于 systemctl 管理,如果新服务的服务程序配置文件生效,需重新加载。
- 使用root权限重新输入命令,如下图则表示启动成功
命令详解:
systemctl daemon-reload #重新加载某个服务的配置文件,如果新安装了一个服务,归属于 systemctl 管理,要是新服务的服务程序配置文件生效,需重新加载。systemctl enable grafana-server.service systemctl start grafana-server.service #服务启动systemctl status grafana-server.service #服务状态查看
首次登录会弹出修改密码界面
- 修改默认端口如下:/usr/share/grafana/conf/defaults.ini
5.3、在应用服务器部署 promtail
5.3.1 安装promtail
- 在应用服务器 上创建目录(此处采集某应用开发环境日志)路径为:/home/datashare/basharingsrv/promtail
- 解压【promtail-linux-amd64.zip】,然后在/home/datashare/basharingsrv/promtail下上传解压后的【promtail-linux-amd64】
- 在/home/datashare/basharingsrv/promtail下上传配置文件yaml
- 配置文件如下:
server http_listen_port 9083 # 若部署多台服务器,端口不能重复使用 grpc_listen_port0positions filename /home/datashare/basharingsrv/promtail/positions.yaml # 记录读取日志的位置信息文件,Promtail重新启动时需要它clientsurl http //10.10.101.17 3100/loki/api/v1/push ## Loki的api服务的地址scrape_configs## dingtalk日志收集并打标签job_name datasharesrv static_configstargets#应用服务器ip 39.99.197.216 labels job datasharesrv host 39.99.197.216 #应用服务器ip __path__ /home/datashare/basharingsrv/taobao-tomcat-7.0.59/logs/catalina.out #应用日志路径
5.3.2 启动promtail
启动命令:nohup ./promtail-linux-amd64 -config.file=./promtail.yaml > ./promtail.log 2>&1 &、
启动日志:
5.4、使用Grafana查看日志
5.4.1 配置数据源
出现如下提示,表示已连接数据源并找到标签。
5.4.2 查看日志
在log_labels下面出现的filename、host、job就是在promtail中配置的
查询语句详解:
"datasharesrv" |~"库表"#匹配job=datasharesrv且包含库表 job="varlogs"#匹配job=varlogs job="datasharesrv|auth"#匹配job=datasharesrv和job=auth job=~"/var/log/xx.log"#按文件名匹配 filename="varlogs" |= "192.168.0.100"#匹配192.168.0.100机器的job=varlogs job="datasharesrv" |~"库表" job=
- {filename="/home/datashare/basharingsrv/taobao-tomcat-7.0.59/logs/catalina.out"}|~"库表"
- {host="39.99.197.216"}|~"库表生成"
the end