loki部署及日志可视化告警
- loki与elk相比
- loki优势
- loki架构
- 环境
- helm3安装
- 安装loki
- 添加chart仓库
- 部署loki
- grafana 添加loki
- 添加数据源
- grafana查询loki日志
- grafana添加业务日志及错误日志图表
- grafana添加数据源
- 添加dashboard
loki与elk相比
elk是开源的日志系统解决方案,通过filebeat收集终端日志,logstash做日志的收集分析过滤,elasticsearch做缓存,建立索引,kibana做可视化的数据展示。elk的架构可以通过集群扩展处理很大量级的日志,但是elk的架构并不如loki轻量,易于部署,我们今天来部署loki进行日志收集。
loki优势
- 不对日志进行全文索引。Loki中存储的是压缩后的非结构化日志,并且只对元数据建立索引,因此Loki 具有操作简单、低成本的优势。
- 使用与 Prometheus 相同的标签。Loki通过标签对日志进行索引和分组,这使得日志的扩展和操作效率更高。
- 特别适合储存 Kubernetes Pod 日志。诸如 Pod 标签之类的元数据会被自动删除和编入索引。
- Grafana 原生支持
loki架构
- promtail收集并将日志发送给loki的 Distributor 组件
- Distributor会对接收到的日志流进行正确性校验,并将验证后的日志分批并行发送到Ingester
- Ingester 接受日志流并构建数据块,压缩后存放到所连接的存储后端
- Querier 收到HTTP查询请求,并将请求发送至Ingester 用以获取内存数据 ,Ingester 收到请求后返回符合条件的数据 ;
- 如果 Ingester 没有返回数据,Querier 会从后端存储加载数据并遍历去重执行查询 ,通过HTTP返回查询结果
环境
kubernetes 1.16.4
helm 3
helm3安装
获取二进制包:
wget https://mirrors.huaweicloud.com/helm/v3.3.0/helm-v3.3.0-linux-amd64.tar.gz
解压安装包,将二进制包放入/usr/local/bin/
安装loki
添加chart仓库
helm repo add loki https://grafana.github.io/loki/charts
helm search repo loki
部署loki
- 直接部署
helm upgrade --install loki loki/loki-stack --namespace kube-system
- 修改部分参数部署
提前创建好pvc “loki-disk”
helm upgrade --install loki loki/loki --set "persistence.enabled=true,persistence.existingClaim=loki-disk,config.table_manager.retention_period=4320h" -n kube-system
helm upgrade --install loki-promtail loki/promtail --set "loki.serviceName=loki" -n kube-system
如修改更多参数,可以下载对应的chat查看修改
helm pull loki/loki
tar -xvf loki-*.tgz
grafana 添加loki
添加数据源
URL:http://loki:3100
grafana查询loki日志
查询语法:https://grafana.com/docs/loki/latest/logql/
grafana添加业务日志及错误日志图表
grafana添加数据源
Name:PromeLoki
URL:http://loki:3100/loki
添加dashboard
Variables:
Name:lokiDataSource
Type:Datasource
Type: loki
Name:Namespace
Refresh:On Dashboard Load
Query:label_values(namespace)
Multi-value: 开启
Include All option:开启
Custon all value: .*
Panel:
Log Lables:count_over_time({namespace=~"$Namespace"} |~ "(error|ERROR|Error)" !~ "loki" !~ "grafana" !~ "count_over"[5m])
Legend: {{ namespace}} --- {{ pod }}
调整一下格式即可