Loki

GitHub地址
官方文档地址

简介

对于生产环境以及一个有追求的运维人员来说,哪怕是毫秒级别的宕机也是不能容忍的。对基础设施及应用进行适当的日志记录和监控非常有助于解决问题,还可以帮助优化成本和资源,以及帮助检测以后可能会发生的一些问题。

Loki 是受Prometheus启发的水平可扩展、高可用、多租户日志聚合系统。它的设计非常具有成本效益且易于操作。它不索引日志的内容,而是索引每个日志流的一组标签。

系统架构

  1. Promtail收集并将日志发送给Loki的 Distributor 组件

  2. Distributor会对接收到的日志流进行正确性校验,并将验证后的日志分批并行发送到Ingester

  3. Ingester 接受日志流并构建数据块,压缩后存放到所连接的存储后端

  4. Querier 收到HTTP查询请求,并将请求发送至Ingester 用以获取内存数据 ,Ingester 收到请求后返回符合条件的数据 ;

  5. 如果 Ingester 没有返回数据,Querier 会从后端存储加载数据并遍历去重执行查询 ,通过HTTP返回查询结果。

特点

用于索引日志的高效内存使用

通过在一组标签上建立索引,索引可以明显小于其他日志聚合产品。更少的内存使得操作成本更低。

多租户

Loki 允许多个租户使用单个 Loki 实例。不同租户的数据与其他租户完全隔离。通过在代理中分配租户 ID 来配置多租户。

LogQL,Loki 的查询语言

Prometheus 查询语言 PromQL 的用户会发现 LogQL 熟悉且灵活,可用于生成针对日志的查询。该语言还有助于从日志数据中生成指标,这是一项远远超出日志聚合的强大功能。

可扩展性

Loki 在小范围内运行良好。在单进程模式下,所有需要的微服务都在一个进程中运行。单进程模式非常适合测试 Loki、在本地运行或小规模运行。Loki 还旨在为大规模安装进行横向扩展。Loki 的每个微服务组件都可以分解为单独的进程,并且配置允许对组件进行单独扩展。

灵活性

许多代理(客户端)都有插件支持。这允许当前的可观察性结构将 Loki 添加为他们的日志聚合工具,而无需切换可观察性堆栈的现有部分。

Grafana 集成

Loki 与 Grafana 无缝集成,提供完整的可观察性堆栈。

对比其他日志系统

与其他日志聚合系统相比,Loki:

  • 不对日志进行全文索引。通过存储压缩的非结构化日志和仅索引元数据,Loki 更易于操作且运行成本更低。
  • 使用您已经在 Prometheus 中使用的相同标签对日志流进行索引和分组,使您能够使用您已经在 Prometheus 中使用的相同标签在指标和日志之间无缝切换。
  • 尤其适合存储Kubernetes Pod 日志。Pod 标签等元数据会被自动抓取和索引。
  • 在 Grafana 中有本机支持(需要 Grafana v6.0)。

组件

基于 Loki 的日志系统由 3 个组件组成:

  • promtail 是代理,负责收集日志并发送给 Loki。
  • loki 是主服务器,负责存储日志和处理查询。
  • Grafana用于查询和显示日志。

Loki 就像 Prometheus,但对于日志:我们更喜欢基于多维标签的索引方法,并且想要一个单二进制、易于操作且没有依赖关系的系统。Loki 与 Prometheus 的不同之处在于专注于日志而不是指标,并且通过推送而不是拉来交付日志。

安装Loki

使用Loki流程

为了运行 Loki,您必须:

  • 下载并安装 Loki 和 Promtail。
  • 下载两个程序的配置文件。
  • 启动Loki。
  • 更新 Promtail 配置文件以将您的日志输入 Loki。
  • 启动Promtail。

安装方法

安装 Loki 和 Promtail 的不同方法的说明。

  • 使用 Tanka 安装(推荐)
  • 通过 Helm 安装
  • 通过 Docker 或 Docker Compose 安装
  • 在本地安装并运行
  • 从源安装

方式1 使用 Docker 安装

  1. 首先需要下载配置文件
wget https://raw.githubusercontent.com/grafana/loki/v2.3.0/cmd/loki/loki-local-config.yaml -O loki-config.yaml
wget https://raw.githubusercontent.com/grafana/loki/v2.3.0/clients/cmd/promtail/promtail-docker-config.yaml -O promtail-config.yaml


完成后,loki-config.yaml并promtail-config.yaml配置文件下载到当前目录中。Docker 容器使用这些配置文件运行 Loki 和 Promtail。

  1. 启动Promtail和loki
docker run -v $(pwd):/mnt/config -p 3100:3100 grafana/loki:2.3.0 -config.file=/mnt/config/loki-config.yaml
docker run -v $(pwd):/mnt/config -v /var/log:/var/log grafana/promtail:2.3.0 -config.file=/mnt/config/promtail-config.yaml

访问 http://localhost:3100/metrics 以查看指标和 http://localhost:3100/ready 准备就绪。

从 v1.6.0 开始,图像被配置为默认以用户 loki 运行,具有 UID10001和 GID 10001。您可以使用不同的用户,特别是在您使用绑定安装时,通过docker run使用命令指定 UID并使用–user=UID适合您需要的数字 UID。

方式2 使用Docker Compose 安装

  1. 首先需要下载compose文件
wget https://raw.githubusercontent.com/grafana/loki/v2.3.0/production/docker-compose.yaml -O docker-compose.yaml
cat docker-compose.yaml

可以看到compose文件安装了loki、promtail、grafana三个组件。

因为这里之前已经安装过grafana,而且这里没有添加配置文件映射,所以稍微改动下,首先下载方式1中使用到的配置文件。

修改为下面这样:

version: "3"
networks:loki:
services:loki:image: grafana/loki:2.3.0ports:- "3100:3100"volumes:- /var/log:/var/log- ./loki-config.yaml:/etc/loki/local-config.yamlcommand: -config.file=/etc/loki/local-config.yamlnetworks:- lokipromtail:image: grafana/promtail:2.3.0volumes:- ./promtail/log:/var/log- ./promtail-config.yaml:/etc/promtail/config.ymlcommand: -config.file=/etc/promtail/config.ymlnetworks:- loki
  1. 启动Promtail和loki
docker-compose -f docker-compose.yaml up -d
docker-compose logs -f

  1. 访问http://localhost:3100/metrics,查看很多监控数据说明安装成功了

3. 添加Grafana数据源

登录Grafana,找到添加数据源页面。

找到Loki

填写Loki地址,然后保存。

采集Spring boot项目日志

1. 修改promtail配置

日志采集是由promtail组件来完成的,所以需要在promtail中添加采集任务。

  1. 首先需要搭建Spring boot项目,采用logback打印日志到文件夹,一般都会,也有现成的项目,这里就不浪费时间再整了。

  2. 因为promtail用的docker安装,所以需要将日志目录隐射到容器内部,才能采集到。

  promtail:image: grafana/promtail:2.3.0volumes:- ./promtail/log:/var/log- ./promtail-config.yaml:/etc/promtail/config.yml# 将本地项目的日志映射到容器内- /root/service/spring-demo/logs:/root/service/spring-demo/logscommand: -config.file=/etc/promtail/config.ymlnetworks:- loki
  1. 修改 promtail-config.yaml,添加采集日志的任务,然后重新启动promtail。
- job_name: springstatic_configs:- targets:- localhostlabels:job: springhost: 192.168.12.12# 采集路径__path__: /root/service/spring-demo/logs/*.log

2. Grafana查询日志

  1. 登录Grafana,点击Explore,选择Loki数据源。

  2. 直接在输入框中输入表达式,开始查询,也可以点击Log browser,根据标签选择过滤条件。

  3. 当选择标签后,自动生成了查询语句,可以看到出现了一个统计图,展示各个级别日志的统计数量,在下方展示了集体的日志信息。

运维监控系列(17)-Prometheus接入Loki日志采集系统及可视化使用详解相关推荐

  1. 5 zabbix 添加host_运维监控实战篇,zabbix自动发现和自动注册图文详解

    一.介绍 自动发现 Zabbix自动发现就是为了解决批量监控而设计的功能之一,什么是自动发现呢,简单来说就是Zabbix Server端可以基于设定的规则,自动批量的去发现局域网若干服务器,并自动把服 ...

  2. zabbix 自动发现规则 触发器_运维监控实战篇,zabbix自动发现和自动注册图文详解...

    一.介绍 自动发现 Zabbix自动发现就是为了解决批量监控而设计的功能之一,什么是自动发现呢,简单来说就是Zabbix Server端可以基于设定的规则,自动批量的去发现局域网若干服务器,并自动把服 ...

  3. 运维监控系列(1)- IT监控系统简介

    运维监控系统 监控系统是实现自动化运维的基础,在一个IT环境中会存在各种各样的设备,例如,硬件基础设施需要监控:软件运行状态需要监控:程序中的API需要监控:程序执行脚本需要监控:以及数据库的慢查询需 ...

  4. 大厂经典运维监控(Zabbix+Prometheus)面试题整理汇总

    1.监控原则 监控是基础设施,目的是为了解决问题,不要只朝着大而全去做,尤其是不必要的指标采集,浪费人力和存储资源(To B商业产品例外). 需要处理的告警才发出来,发出来的告警必须得到处理. 简单的 ...

  5. MySQL运维(二)MySQL分库分表概念及实战、读取分离详解

    MySQL运维(二)MySQL分库分表详解.读取分离详解 1.MySQL分库分表相关概念 1.1 分库分表概念 1.1.1 分库的原因 分库:就是一个数据库分成多个数据库,部署到不同机器. 如果业务量 ...

  6. 运维监控系列(8)-Prometheus+Grafana监控常用微服务中间件Nacos、Seata、Rocketmq

    Nacos Nacos官方文档 Nacos支持通过暴露metrics数据接入第三方监控系统监控Nacos运行状态,目前支持prometheus.elastic search和influxdb. 1. ...

  7. 运维监控系列(16)-Alertmanager路由、抑制、静默功能使用详解。

    分组(Grouping)及路由(route) 简介 分组将类似性质的警报分类为单个通知.当许多系统同时发生故障并且可能同时触发数百到数千个警报时,这在较大的中断期间尤其有用. 示例:当发生网络分区时, ...

  8. 运维监控系列(15)-Alertmanager添加163邮箱、钉钉、微信告警通知功能

    163邮箱 可用通过邮件方式进行告警通知的发送,接着上篇文档,我们配置发送邮件告警方式. 1. 设置163邮箱 发送邮件,需要smtp邮件服务器,首先需要对网易邮箱进行设置. 首先登陆163邮箱,进入 ...

  9. grafana的+按钮_基于 Prometheus、Grafana 的 EMQ X 物联网 MQTT 服务器可视化运维监控...

    Prometheus 是由 SoundCloud 开源监控告警解决方案,支持多维 数据模型(时序由 metric 名字和 k/v 的 labels 构成),具备灵活的查询语句(PromQL),支持多种 ...

最新文章

  1. 校园二手平台的开发和利用
  2. ViewPager+Fragment实现TabHost(可复用的类)
  3. QQ、MSN、skype的网页临时会话代码
  4. Ubuntu下 MySQL安装
  5. Oracle日期格式化问题:to_date(sysdate,'yyyy-MM-dd')与 to_date(to_char(sysdate,'yyyy-MM-dd'),'yyyy-MM-dd')区别
  6. zepto源码研究 - ajax.js($.ajaxJSONP 的分析)
  7. linux db2备份,db2实现备份
  8. 最新友盟6.1.1集成遇到的坑,自定义分享界面实现(跳转控制器做分享)
  9. visio画图复制粘贴到word_visio复制粘贴到word中
  10. 不小心格式化了硬盘怎么恢复数据?
  11. 2021年6月7日大学化学(14)—价键理论
  12. 测试网站速度的8款免费工具推荐
  13. PyTorch中的torch.max()和torch.maximum()的用法详解
  14. 道——为天地万物之总源头
  15. 厦大C语言上机 1394 抛硬币
  16. 解决DeepL翻译器翻译出来的文档是只读模式,不能编辑
  17. Android APP native 崩溃分析之 linker SIGBUS 崩溃
  18. 【代码猴子-培养正确的编程态度和方法】--《编程匠艺》
  19. Oracle ORA-06502 数字或值错误
  20. (车载网络-读书笔记)Source Identification Using Signal Characteristics in Controller Area Networks

热门文章

  1. oracle数据库dca,达梦数据库DCA考试经历
  2. 《图解密码技术》——读书笔记
  3. 经典生产者-消费者问题解析
  4. 无线信号的RSS和CSI的理解
  5. h3c交换机重启_h3c交换机怎么恢复出厂设置
  6. 重启计算机的网络适配器,Win7网络适配器无法启动怎么办?
  7. OSGI企业应用开发(十五)基于Spring、Mybatis、Spring MVC实现一个登录应用
  8. 拉取项目pom文件报错,jai_core-1.1.3.jar,解决jar引入问题
  9. ImportError: cannot import name ‘OrderedDict‘ from ‘typing‘ (/hpcfiles/users/zk.111/anaconda3
  10. java中.next()方法的作用及应用?