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架构

分布式日志系统有哪些 分布式部署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

分布式日志系统有哪些 分布式部署loki_分布式日志系统有哪些_02

grafana查询loki日志

查询语法:https://grafana.com/docs/loki/latest/logql/

分布式日志系统有哪些 分布式部署loki_分布式日志系统有哪些_03

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 }}

调整一下格式即可