一、简 介 Loki是受Prometheus启发由Grafana Labs团队开源的水平可扩展,高度可用的多租户日志聚合系统。 开发语言: Google Go。它的设计具有很高的成本效益,并且易于操作。使用标签来作为
一、简 介
Loki是受Prometheus启发由Grafana Labs团队开源的水平可扩展,高度可用的多租户日志聚合系统。 开发语言: Google Go。它的设计具有很高的成本效益,并且易于操作。使用标签来作为索引,而不是对全文进行检索,也就是说,你通过这些标签既可以查询日志的内容也可以查询到监控的数据签,极大地降低了日志索引的存储。系统架构十分简单,由以下3个部分组成 : * Loki 是主服务器,负责存储日志和处理查询 。 * promtail 是代理,负责收集日志并将其发送给 loki(只收集日志,不在本地进行运算) 。 * Grafana 用于 UI 展示。 只要在被监控服务器上安装promtail来收集日志然后发送给Loki存储,就可以在Grafana UI界面通过添加Loki为数据源进行日志查询(如果Loki服务器性能不够,可以部署多个Loki进行存储及查询)。作为一个日志系统不关只有查询分析日志的能力,还能对日志进行监控和报警二、系 统 架 构

三、与 ELK 比 较
1、ELK虽然功能丰富,但规模复杂,资源占用高,操作苦难,很多功能往往用不上,有点杀鸡用牛刀的感觉。 2、不对日志进行全文索引。通过存储压缩非结构化日志和仅索引元数据,Loki 操作起来会更简单,更省成本。 3、通过使用与 Prometheus 相同的标签记录流对日志进行索引和分组,这使得日志的扩展和操作效率更高。 4、安装部署简单快速,且受 Grafana 原生支持。四、LOKI查询类型
1、日志查询返回日志行的内容。 例如:对关键字的统计(五分钟出现WARN次数)

五、LOKI架构部署
1、部署环境
服务器 系统 部署软件 版本号 默认端口 被监控服务器 Linux Promtail v2.2.1 9080 LOKI服务器 Linux Loki v2.2.1 31002、部署过程
2.1 在应用服务器上部署promtail
curl -O -L "https://github.com/grafana/loki/releases/download/v2.2.1/promtail-linux-amd64.zip" unzip -q promtail-linux-amd64.zip -d /opt/jzjk/promtail 并新增文件/opt/jzjk/promtail/promtail.yaml cat /opt/jzjk/promtail/promtail.yaml server: http_listen_port: 9080 grpc_listen_port: 0 positions: filename: /tmp/positions.yaml clients: - url: http://loki服务器IP:3100/loki/api/v1/push scrape_configs: - job_name: test_log static_configs: - targets: - localhost labels: job: test_log __path__: /opt/test.log2.2 在LOKI服务器上部署loki
curl -O -L "https://github.com/grafana/loki/releases/download/v2.2.1/loki-linux-amd64.zip" unzip -q loki-linux-amd64.zip -d /opt/jzjk/loki 并新增文件/opt/jzjk/loki/loki.yaml auth_enabled: false server: http_listen_port: 3100 #端口号 log_level: debug #日志等级为debug ingester: lifecycler: address: 127.0.0.1 ring: kvstore: store: inmemory replication_factor: 1 final_sleep: 0s chunk_idle_period: 5m chunk_retain_period: 30s schema_config: configs: - from: 2020-05-15 store: boltdb object_store: filesystem schema: v11 index: prefix: index_ period: 168h #每张表的时间范围6天 storage_config: boltdb: directory: /opt/jzjk/loki/index #索引文件存储地址 filesystem: directory: /opt/jzjk/loki/chunks #块存储地址 limits_config: enforce_metric_name: false reject_old_samples: true reject_old_samples_max_age: 168h3.启动服务(先启动LOKI)
nohup /opt/jzjk/loki/loki-linux-amd64 -config.file=/opt/jzjk/loki/loki.yaml & nohup /opt/jzjk/promtail/promtail-linux-amd64 -config.file=/opt/jzjk/promtail/promtail.yaml &六、LOKI数据的展示
1.非json格式日志的数据处理
在loki中查看日志全量,发现Log labels 只有2个,假设java后面的数据是我们要获取的变量,仅用现在的Log labels 无法获取,故需要用正则表达式regexp新增我们要获取的数据


七、LOKI告警配置
1.在loki配置文件中新增ruler组件,新增内容如下:
ruler: storage: type: local local: #rule规则存储目录 directory: /tmp/rules rule_path: /tmp/scratch #告警推送地址,对接到prometheus告警地址 alertmanager_url: http://localhost:9093 ring: kvstore: store: inmemory enable_api: true2、确保/tmp/rules及/tmp/scratch目录存在,并在/tmp/rules下新建目录fake(为何是fake,请看下图org_id部分),在fake下创建yaml文件存放告警规则

3、重启loki进程,打开prometheus的告警页面 prometheus_ip:9093验证告警是否呈现


