Loki日志聚合分析系统-kubernetes
Promtail 介绍
Loki 是 Grafana Labs 团队最新的开源项目,是一个水平可扩展,高可用性,多租户的日志聚合系统。它的设计非常经济高效且易于操作,因为它不会为日志内容编制索引,而是为每个日志流编制一组标签,专门为 Prometheus 和 Kubernetes 用户做了相关优化。
与传统日志收集系统(例ELK)相比,Loki的优势有哪些?
- 不对日志进行全文索引。通过存储压缩非结构化日志和仅索引元数据,Loki操作起来会更简单,更省成本
- 通过与 Prometheus 相同的标签记录流对日志进行索引和分组,这使得日志的扩展和操作效率更高
- 特别适合存储 Kubernetes Pod 日志;诸如 Pod 标签之类的元数据会被自动删除和编入索引
- 受 Grafana 原生支持,与 Prometheus 配合更加方便
解决痛点?
无需再去其他界面,或者终端上查看单个Pod的日志
Loki的架构
- Loki 为主服务器。负责存储日志和处理查询
- Promtail 是代理。负责收集日志并将其发送给Loki
- Grafana 用来UI展示。
Promtail 将本地日志内容传送到 Loki 实例。需要监控的应用程序的机器上都需要部署该组件。
它的主要工作流程可以划分为:
- 使用 fsnotify 监听指定目录下(例如:/var/log/*.log)的文件创建与删除
- 对每个活跃的日志文件起一个 goroutine 进行类似 tail -f 的读取,读取到的内容发送给 channel
- 有一个单独的 goroutine 会读取 channel 中的日志行,分批并附加上标签后推送给 Loki
Loki项目地址:https://github.com/grafana/loki/
官网:https://grafana.com/oss/loki/
1. helm下载value
# 添加chart helm repo add loki https://grafana.github.io/loki/charts # 更新chart helm repo update ## 将loki template下载到本地 helm pull loki/loki-stack # 解压并自定义修改参数 tar zxvf loki-stack-2.9.29tgz cd loki-stack/ $$ ls charts Chart.yaml README.md requirements.lock requirements.yaml templates values.yaml cd charts/ $$ ls filebeat fluent-bit grafana logstash loki prometheus promtail
2. 修改部署文件
可以修改values.yaml文件,指定是否开启Grafana、Prometheus等服务,默认不开启的:
loki: enabled: true promtail: enabled: true fluent-bit: enabled: false grafana: enabled: true sidecar: datasources: enabled: true image: tag: 6.7.0 prometheus: enabled: false
在此只开启Grafana
修改Grafana的values.yaml,使其Service暴露方式为NodePort(默认为ClusterIp):
vim charts/grafana/values.yaml
service: type: NodePort port: 80 nodePort: 30003 # 端口范围:30000-32767 targetPort: 3000 # targetPort: 4181 To be used with a proxy extraContainer annotations: {} labels: {} portName: service
修改账号密码
# Administrator credentials when not using an existing secret (see below) adminUser: admin adminPassword: admin
3. promtail服务在构建时会自动挂载
- 宿主机docker主目录下的containers目录,一般默认都为/var/lib/docker/containers
- pod的日志目录,一般默认为/var/log/pods
这就需要特别注意一下,如果是修改过docker默认的存储路径的,需要将mount的路径进行修改,promtail找不到对应的容器日志
具体docker 存储路径,可以使用docker info 命令查询
vim charts/promtail/values.yaml
volumes: - name: docker hostPath: path: /data/lib/docker/containers ## 我的是放在了data下 - name: pods hostPath: path: /var/log/pods volumeMounts: - name: docker mountPath: /data/lib/docker/containers ## 挂载点也要进行修改 readOnly: true - name: pods mountPath: /var/log/pods readOnly: true
4. 安装
helm install -n loki loki -f values.yaml ../loki-stack 2020/11/11 17:18:54 Warning: Merging destination map for chart 'logstash'. The destination item 'filters' is a table and ignoring the source 'filters' as it has a non-table value of: <nil> NAME: loki LAST DEPLOYED: Wed Nov 11 17:18:53 2020 NAMESPACE: loki STATUS: DEPLOYED
5. 查看暴露的服务
查看pods节点
kubectl get pods -n loki
二、使用Loki
通过服务器ip+30002访问,登录成功后,有一点需要注意的地方,也是非常容易踩坑的地方!!!
如果是安装Loki时采用的以上方法,开启了Grafana,那系统会自动配置好Data sources,应该不会有什么问题。
但是,如果是手动搭建的Grafana,需要手动添加Data Sources时,一定注意:
数据源名称中的Loki,L一定要是大写!!!
如果不是大写,会导致连接不到Loki源,一般回报错:Error connecting to datasource: Loki: Bad Gateway. 502
如果是Loki,L大写,结局完全不一样
数据源添加完毕后,开始查看日志
点击Explore,可以看到选择labels的地方
总之部署到k8s中,你想怎么看就怎么看
点击show logs就可以查看具体日志。
end.
本文来自博客园,作者:王竹笙,转载请注明原文链接:https://www.cnblogs.com/edeny/p/17265950.html