轻量级日志系统——Loki

目录

一、loki简介

二、Loki 快速上手

第一步安装 Loki

 第二步安装 Promtail

第三步安装granafa

三、LogQL 语法 

 四、Loki收集nginx日志

1、修改nginx配置

2、nginx服务器上安装promtail

3、添加doshbarod 


一、loki简介

        Loki是 Grafana Labs 团队最新的开源项目,是一个水平可扩展,高可用性,多租户的日志聚合系统。它的设计非常经济高效且易于操作,因为它不会为日志内容编制索引,而是为每个日志流编制一组标签。项目受 Prometheus 启发,官方的介绍就是: Like Prometheus, but for logs ,类似于 Prometheus 的日志系统。

二、Loki 快速上手

        Loki 作为日志系统的后起之秀,设计上可以说非常优秀,设计的理念就是为了让日志聚合更简单,它被设计为非常经济高效且易于操作。它不索引日志的内容,而是为每个日志流设置一组标签。它主要由三部分组成。
与其他日志聚合系统相比, Loki 具有下面的一些特性:
不对日志进行全文索引。通过存储压缩非结构化日志和仅索引元数据, Loki 操作起来会更简
单,更省成本。
通过使用与 Prometheus 相同的标签记录流对日志进行索引和分组,这使得日志的扩展和操
作效率更高。
特别适合储存 Kubernetes Pod 日志 ; 诸如 Pod 标签之类的元数据会被自动删除和编入索引

各日志收集组件简单对比

名称
安装的组件
优点
ELK/EFK
elasticsearch logstash
kibana filebeat kafka/redis
支持自定义 grok 正则解析复杂日志内容;
dashboard 支持主富的可视化展示
Loki
grafana loki promtail
占用资源小; grafana 原生支持;查询速度快

 官方地址:https://grafana.com/oss/loki/

文档地址: https://grafana.com/docs/grafana/latest/features/datasources/loki/
git 地址: https://github.com/grafana/loki/blob/master/docs/README.md
下载地址: Releases · grafana/loki (github.com)

第一步安装 Loki

简单介绍下 Loki
Grafana Loki 是一个日志聚合工具,它是功能齐全的日志堆栈的核心。
Loki 是一个为有效保存日志数据而优化的数据存储。日志数据的高效索引将 Loki 与其他日志系统区分开来,
与其他日志系统不同, Loki 索引是根据标签构建的,原始日志消息未编入索引。
yum install -y https://github.com/grafana/loki/releases/download/v2.9.8/loki-2.9.8.x86_64.rpm# 配置文件详解
[root@k8s-master01 ~]# cat /etc/loki/config.yml 
auth_enabled: falseserver:http_listen_port: 3100    #http访问端口grpc_listen_port: 9096    #rpc访问端口common:instance_addr: 192.168.186.100    #修改为自己的IP或localhostpath_prefix: /tmp/lokistorage:filesystem:chunks_directory: /tmp/loki/chunks    #记录块存储目录,默认chunks块上的日志数量或
到期后,将chunks数据打标签后存储rules_directory: /tmp/loki/rules    #规则配置目录replication_factor: 1ring:kvstore:store: inmemoryquery_range:        #查询规则results_cache:    #结果缓存cache:embedded_cache:    #默认开启后会有提示,未配置缓存项,可以暂不开启enabled: truemax_size_mb: 100schema_config:    #配置索引信息configs:- from: 2020-10-24store: boltdb-shipperobject_store: filesystemschema: v11index:prefix: index_    #索引前缀period: 24h        #索引时长ruler:alertmanager_url: http://localhost:9093# By default, Loki will send anonymous, but uniquely-identifiable usage and configuration
# analytics to Grafana Labs. These statistics are sent to https://stats.grafana.org/
#
# Statistics help us better understand how Loki is used, and they show us performance
# levels for most users. This helps us prioritize features and documentation.
# For more information on what's sent, look at
# https://github.com/grafana/loki/blob/main/pkg/usagestats/stats.go
# Refer to the buildReport method to see what goes into a report.
#
# If you would like to disable reporting, uncomment the following lines:
#analytics:
#  reporting_enabled: false# 启动服务
systemctl enable --now loki

 第二步安装 Promtail

yum install -y https://github.com/grafana/loki/releases/download/v2.9.8/promtail-2.9.8.x86_64.rpm# 配置文件详解 /etc/promtail/config.yml
[root@k8s-master01 ~]# cat /etc/promtail/config.yml 
# This minimal config scrape only single log file.
# Primarily used in rpm/deb packaging where promtail service can be started during system init process.
# And too much scraping during init process can overload the complete system.
# https://github.com/grafana/loki/issues/11398server:http_listen_port: 9080grpc_listen_port: 0positions:filename: /tmp/positions.yaml    #用于记录每次读取日志文件的索引行数,如:promtail重启后从该配置中恢复日志文件的读取位置clients:
- url: http://192.168.186.100:3100/loki/api/v1/push    #推送日志流到Loki中的apiscrape_configs:        #发现日志文件的位置并从中提取标签
- job_name: system    #任务名称static_configs:    # 目录配置- targets:        # 标签- localhostlabels:job: varlogs    #子任务名称,通常以项目命令#NOTE: Need to be modified to scrape any additional logs of the system.__path__: /var/log/messages    #要读取的日志文件的位置,允许使用通配符/*log或/**/*.log- targets:- localhostlabels:job: securelogs#NOTE: Need to be modified to scrape any additional logs of the system.__path__: /var/log/secure         # 定义不同的日志文件路径#赋予权限
[root@k8s-master01 ~]# setfacl -m u:promtail:r /var/log/secure 
[root@k8s-master01 ~]# setfacl -m u:promtail:r /var/log/messages # 启动服务
systemctl enable --now promtail
# 检查 promtial 配置
http://IP:9080/targets

第三步安装granafa

yum install -y https://dl.grafana.com/enterprise/release/grafana-enterprise-
10.0.2-1.x86_64.rpm
# 启动服务
systemctl enable --now grafana-server
访问 granafa http://IP:3000 默认用户密码为 admin
修改语言和时区

添加完成后点击保存
保存完成后,切换到 grafana 左侧区域的 Explore ,即可进入到 Loki 的页面:

三、LogQL 语法 

选择器
对于查询表达式的标签部分,将放在 {} 中,多个标签表达式用逗号分隔:
{app="mysql",name="mysql-backup"}
支持的符号有:
= :完全相同。
!= :不平等。
=~ :正则表达式匹配。
!~ :不要正则表达式匹配。
过滤表达式
编写日志流选择器后,您可以通过编写搜索表达式进一步过滤结果。搜索表达式可以文本或正则表达式。 如
{job=“mysql”} |= “error”
{name=“kafka”} |~ “tsdb-ops.*io:2003”
{instance=~“kafka-[23]”,name=“kafka”} != kafka.server:type=ReplicaManager
支持多个过滤:
{job=“mysql”} |= “error” != “timeout”
目前支持的操作符
|= line 包含字符串。
!= line 不包含字符串。
|~ line 匹配正则表达式。
!~ line 与正则表达式不匹配。

 四、Loki收集nginx日志

为了方便grafana dashbord展示,我们把日志格式修改为json

1、修改nginx配置

vim nginx.conf ,增加如下配置:
log_format json escape=json '{''"remote_addr": "$remote_addr", ''"request_uri": "$request_uri", ''"request_length": "$request_length", ''"request_time": "$request_time", ''"request_method": "$request_method", ''"status": "$status", ''"body_bytes_sent": "$body_bytes_sent", ''"http_referer": "$http_referer", ''"http_user_agent": "$http_user_agent", ''"http_x_forwarded_for": "$http_x_forwarded_for", ''"http_host": "$http_host", ''"server_name": "$server_name", ''"upstream": "$upstream_addr", ''"upstream_response_time":                                                      "$upstream_response_time", ''"upstream_status": "$upstream_status", '#'"geoip_country_code": "$geoip2_data_country_code", '#'"geoip_country_name": "$geoip2_data_country_name", '#'"geoip_city_name": "$geoip2_data_city_name"''}';access_log  /var/log/nginx/json_access.log json;参数 描述
remote_addr 客户端的IP地址
request_uri 客户端请求的URI
request_length 请求的内容长度
request_time 请求处理时间
request_method 请求方法(GET、POST等)
status HTTP响应状态码
body_bytes_sent 发送给客户端的字节数
http_referer 请求中的Referer头部
http_user_agent 客户端的User-Agent头部
http_x_forwarded_for X-Forwarded-For头部,客户端真实IP
http_host 请求的Host头部
server_name 服务器名称
upstream 后端服务器的地址
upstream_response_time 后端服务器响应时间
upstream_status 后端服务器响应的HTTP状态码
geoip_country_code GeoIP国家代码(已注释)
geoip_country_name GeoIP国家名称(已注释)
geoip_city_name GeoIP城市名称(已注释)

2nginx服务器上安装promtail

yum install -y https://github.com/grafana/loki/releases/download/v2.9.8/promtail- 2.9.8.x86_64.rpm

[root@k8s-node02 ~]# cat /etc/promtail/config.yml 
# This minimal config scrape only single log file.
# Primarily used in rpm/deb packaging where promtail service can be started during system init process.
# And too much scraping during init process can overload the complete system.
# https://github.com/grafana/loki/issues/11398

server:
  http_listen_port: 9080
  grpc_listen_port: 0

positions:
  filename: /tmp/positions.yaml

clients:
- url: http://192.168.186.100:3100/loki/api/v1/push

scrape_configs:
- job_name: nginx
  static_configs:
  - targets:
      - localhost
    labels:
      job: nginxlogs
      host: 192.168.186.100
      #NOTE: Need to be modified to scrape any additional logs of the system.
      __path__: /var/log/nginx/*.log

# 注意,日志目录权限
[root@localhost ~] # setfacl -R -m u:promtail:rx /var/log/nginx/
[root@localhost ~] # systemctl restart promtail

3、添加doshbarod 

id 16101

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/32095.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Springcloud微服务】Docker上篇

🔥 本文由 程序喵正在路上 原创,CSDN首发! 💖 系列专栏:Springcloud微服务 🌠 首发时间:2024年6月22日 🦋 欢迎关注🖱点赞👍收藏🌟留言&#x1f4…

新闻管理与推荐系统Python+Django+协同过滤推荐算法+管理系统

一、介绍 新闻管理与推荐系统。本系统使用Python作为主要开发语言开发的一个新闻管理与推荐的网站平台。 网站前端界面采用HTML、CSS、BootStrap等技术搭建界面。后端采用Django框架处理用户的逻辑请求,并将用户的相关行为数据保存在数据库中。通过Ajax技术实现前后…

【ARMv8/v9 GIC 系列 2.2 -- GIC SPI 中断的 GICD_ISACTIVER 和 GICD_ICACTIVER 配置】

文章目录 GIC 中断 Active 状态的配置中断状态分类GICD_ISACTIVER<n>GICD_ICACTIVER<n>参数 n 编号解释中断设置举例设置中断ID 68为活动状态清除中断ID 68的活动状态 小结 GIC 中断 Active 状态的配置 在ARMv8/ARMv9 体系结构中&#xff0c;GICD_ISACTIVER<n&…

2021数学建模C题目– 生产企业原材料的订购与运输

C 题——生产企业原材料的订购与运输 思路&#xff1a;该题主要是通过对供应商的供货能力和运送商的运货能力进行估计&#xff0c;给出合适的材料订购方案 程序获取 第一题问题思路与结果&#xff1a; 对 402 家供应商的供货特征进行量化分析&#xff0c;建立反映保障企业生…

jeecg-boot项目的部署-windows系统

一、基础环境的准备&#xff1a; 1、后台基础环境&#xff1a;JDK、redis、数据库&#xff1a;sqlserver 2、前端基础环境&#xff1a;nginx redis和nginx的安装都很方便&#xff0c;直接去对应的官网&#xff0c;下载zip压缩包&#xff0c;然后解压&#xff0c;执行.exe文件…

一、docker简介及卸载、安装

目录 一、Docker 简介 二、dockers三要素 1、Docker镜像&#xff08;image&#xff09; 2、Docker仓库 3、Docker容器 三、docker架构图 四. Docker 运行的基本流程 五、docker 卸载 1、停止docker服务 2、查看yum安装的docker文件包 3、查看docker相关的rpm源文件 …

【Pandas驯化-11】一文搞懂Pandas中的分组函数groupby与qcut、fillna使用

【Pandas驯化-11】一文搞懂Pandas中的分组函数groupby与qcut、fillna使用 本次修炼方法请往下查看 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合&#xff0c;智慧小天地&#xff01; &#x1f387; 相关内容文档获…

基于STM32的智能工厂环境监测系统

目录 引言环境准备智能工厂环境监测系统基础代码实现&#xff1a;实现智能工厂环境监测系统 4.1 数据采集模块4.2 数据处理4.3 控制系统实现4.4 用户界面与数据可视化应用场景&#xff1a;智能工厂管理与优化问题解决方案与优化收尾与总结 1. 引言 智能工厂环境监测系统通过…

数据库系统概论——数据库恢复技术

文章目录 数据库恢复技术事务的基本概念什么是事务如何定义事务&#xff1a;事务的特性 数据库恢复概述故障的种类恢复的实现技术恢复策略事务故障的恢复系统故障的恢复介质故障的恢复 数据库恢复技术 事务的基本概念 什么是事务 事务使用户定义的一个数据库操作序列&#x…

kotlin类

一、定义 1、kotlin中使用关键字class 声明类,如果一个类没有类体&#xff0c;也可以省略花括号&#xff0c; 默认为public 类型的&#xff1a; // 这段代码定义了一个公开的、不可被继承的Test类 class Test{} // 没有类体&#xff0c;可以省略花括号 class Test 底层代码&…

2024最新IDEA插件开发+发布全流程 SelectCamelWords[选中驼峰单词](idea源代码)

2024最新IDEA插件开发&#xff08;发布&#xff09;-SelectCamelWords[选中驼峰单词]&#xff08;idea源代码&#xff09; 参考文档 Jetbrains Idea插件开发文档: https://plugins.jetbrains.com/docs/intellij/welcome.html代码地址&#xff1a;https://github.com/yangfeng…

Mybatis框架的缓存

Mybatis框架的缓存 一.为什么使用缓存 缓存(cache&#xff09;的作用是为了减去数据库的压力&#xff0c;提高查询性能。缓存实现的 原理是从数据库中查询出来的对象在使用完后不要销毁&#xff0c;而是存储在内存&#xff08;缓存&#xff09; 中&#xff0c;当再次需要获取…

windows-docker-本地部署-前端

前置条件 docker已有需要打包的文件也已经写好了 打包镜像 ip地址修改 需要根据自身修改的文件 .env.local文件存放你前端访问的端口 172.24.240.1:这部分是自己电脑的ip 如何查看本机ip&#xff0c;使用IPV4的地址。 #本地 #API_HOST_URLhttp://172.24.240.1:8091打包文…

Excel导出实例

在上一节的基础上&#xff0c;本文演示下如何导出excel数据。 Excel导出操作演示 继承ocean-easyexcel SDK <dependency><groupId>com.angel.ocean</groupId><artifactId>ocean-easyexcel</artifactId><version>1.0.0</version> …

架构设计 - 网站性能优化之静态资源CDN配置

摘要: web 应用业务缓存通常3级: 一级缓存:JVM 本地缓存 二级缓存:Redis集中式缓存 三级缓存:Nginx Proxy Cache 缓存 或 Nginx Lua 缓存 四级缓存:静态资源CDN缓存 页面静态化 本文主要分享 怎样通过CDN缓存静态资源的方式 提高系统性能和响应速度。 WEB应用通过CD…

【机器学习】正则卷积群理论及Python代码实现

1. 引言 1.1.卷积神经网络CNN 卷积神经网络&#xff08;CNN&#xff09;的数学模型是深度学习中用于处理图像和其他高维数据的关键组成部分。那么&#xff0c;CNN究竟是什么呢&#xff1f; 总结起来&#xff0c;CNN网络主要完成以下操作&#xff1a; 卷积操作&#xff08;Co…

无线麦克风一拖二哪个牌子好,揭秘目前音质最好的麦克风

在自媒体的世界里&#xff0c;无线领夹麦克风已经成了一种标准配置&#xff0c;它受到广大视频创作者的青睐。无论是刚刚踏入短视频领域的新手&#xff0c;还是已经拥有丰富经验的资深博主&#xff0c;都深知一款好的领夹麦克风对于提升视频音频质量的重要性。它不仅能帮助创作…

SQLCMD完全指南:掌控 SQL Server

SQL Server 拥有被广泛认可的一流管理工具——SQL Server Management Studio&#xff08;简称 SSMS&#xff09;。它提供了丰富的功能&#xff0c;极大地简化了开发人员和数据库管理员&#xff08;DBA&#xff09;的工作。 目录 SQLCMD 入门使用 SQLCMD 连接 SQL ServerSQLCMD …

Java和C语言中基础概念中的区别有哪些?

Java和C语言中基础概念中的区别有哪些&#xff1f; 标识符数据类型运算符加号%号& 和 | 关系表达式函数声明代码规范数组 以下是Java和C语言在一些基础概念中的区别&#xff08;不包含面向对象等的高级知识&#xff09; 标识符 在Java中&#xff0c;标识符可以由数字、字母…

【Java】字节数组 pcm 与 wav 格式互转(附原理概述)

前言 最近实现了一个文字转语音的功能&#xff0c;语音引擎返回的是pcm格式的数据。需要转化成wav格式前端才能播放。本文首先会给出解决方案&#xff0c;后续会讲背后的原理。 场景 1. pcm wav 转化工具类 入参和出参都为byte[]&#xff0c;理论上有了 byte[] 就可以输出…