轻量级日志系统——Loki

news2024/10/7 18:28:42

目录

一、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: false

server:
  http_listen_port: 3100    #http访问端口
  grpc_listen_port: 9096    #rpc访问端口

common:
  instance_addr: 192.168.186.100    #修改为自己的IP或localhost
  path_prefix: /tmp/loki
  storage:
    filesystem:
      chunks_directory: /tmp/loki/chunks    #记录块存储目录,默认chunks块上的日志数量或
到期后,将chunks数据打标签后存储
      rules_directory: /tmp/loki/rules    #规则配置目录
  replication_factor: 1
  ring:
    kvstore:
      store: inmemory

query_range:        #查询规则
  results_cache:    #结果缓存
    cache:
      embedded_cache:    #默认开启后会有提示,未配置缓存项,可以暂不开启
        enabled: true
        max_size_mb: 100

schema_config:    #配置索引信息
  configs:
    - from: 2020-10-24
      store: boltdb-shipper
      object_store: filesystem
      schema: v11
      index:
        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/11398

server:
  http_listen_port: 9080
  grpc_listen_port: 0

positions:
  filename: /tmp/positions.yaml    #用于记录每次读取日志文件的索引行数,如:promtail重启后从该配置中恢复日志文件的读取位置

clients:
- url: http://192.168.186.100:3100/loki/api/v1/push    #推送日志流到Loki中的api

scrape_configs:        #发现日志文件的位置并从中提取标签
- job_name: system    #任务名称
  static_configs:    # 目录配置
  - targets:        # 标签
      - localhost
    labels:
      job: varlogs    #子任务名称,通常以项目命令
      #NOTE: Need to be modified to scrape any additional logs of the system.
      __path__: /var/log/messages    #要读取的日志文件的位置,允许使用通配符/*log或/**/*.log
  - targets:
      - localhost
    labels:
      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.coloradmin.cn/o/1849380.html

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

相关文章

【图解IO与Netty系列】Netty源码解析——事件循环

Netty源码解析——事件循环 Netty事件循环源码解析select()processSelectedKeys()NioMessageUnsafe#read()NioByteUnsafe#read() runAllTasks() Netty事件循环 当Netty服务端启动起来以后,就可以接受客户端发送的请求,接收到客户端发来的请求后就会有事…

大数据学习-大数据介绍

意义 从海量的数据中分析出海量数据背后的价值 需要分析海量的数据,就需要存储、计算和分析 那就需要分布式多台计算机合适的工具来处理数据 工具 特点 大数据的核心工作:从海量的、高增长的、多类别的、信息密度低的数据中挖掘出高质量的结果 数据存储…

RedHat9 | Web服务配置与管理(Apache)

一、实验环境 1、Apache服务介绍 Apache服务,也称为Apache HTTP Server,是一个功能强大且广泛使用的Web服务器软件。 起源和背景 Apache起源于NCSA httpd服务器,经过多次修改和发展,逐渐成为世界上最流行的Web服务器软件之一。…

C++ STL ③

sort排序 #include <iostream> #include <algorithm> using namespace std;int main() {int a[5],i;cout<<"请输入数组元素:"<<endl;for(i0;i<5;i){cin>>a[i];}sort(a,a5,greater<int>());for(i0;i<5;i){cout<<a[i…

系统架构师考点--数据库系统

大家好。今天我来总结一下数据库系统的相关考点。本考点一般情况下上午场考试占3-5分&#xff0c;下午场案例分析题也会出现。 一、数据库系统 数据&#xff1a;数据库中存储的基本对象&#xff0c;是描述事物的符号记录。数据的种类:文本、图形、图像、音频、视频、学生的档…

基于Redis和openresty实现高并发缓存架构

目录 概述缓存架构设计实践代码路由业务封装redis 效果 概述 本文是对项目中 QPS 高并发相关问题的一种解决方案&#xff0c;利用 Nginx 与 Redis 的高并发、超低延迟响应&#xff0c;结合 Canal 进行实现。 openrestry官网 当程序需要提供较高的并发访问时&#xff0c;往往需…

状态压缩DP——AcWing 291. 蒙德里安的梦想

状态压缩DP 定义 状态压缩DP是一种利用二进制数来表示状态的动态规划算法。它通过将状态压缩成一个整数&#xff0c;从而减少状态数量&#xff0c;提高算法效率。 运用情况 状态压缩DP通常用于解决具有状态转移和最优解性质的问题&#xff0c;例如组合优化、图论、游戏等问…

UDS服务——TransferData (0x36)

诊断协议那些事儿 诊断协议那些事儿专栏系列文章,本文介绍TransferData (0x36)—— 数据传输,用于下载/上传数据时用的,数据的传输方向由不同的服务控制:0x34服务表示下载,0x35服务表示上传。通过阅读本文,希望能对你有所帮助。 文章目录 诊断协议那些事儿传输数据服务…

Redis-事务-watch-unwatch

文章目录 1、监视key2、提交事务 1、监视key 打开两个窗口&#xff0c;第一个窗口先监视key&#xff0c;然后开始事务&#xff0c;然后再打开第二个窗口&#xff0c;修改balance为0 2、提交事务 此时事务被打断

银河麒麟V10 SP1.1操作系统 离线安装 nginx1.21.5、redis 服务

银河麒麟官网地址&#xff1a;国产操作系统、麒麟操作系统——麒麟软件官方网站 一、查看系统版本 命令&#xff1a;nkvers 我的是 release V10 (SP1)&#xff0c;根据这个版本去官网找对应的rpm包 银河麒麟操作系统的rpm包必须从官方找&#xff0c; 要是随便找个Centos的rp…

1.SG90

目录 一.实物图 二.原理图 三.简介 四.工作原理 一.实物图 二.原理图 三.简介 舵机&#xff08;英文叫Servo&#xff09;&#xff0c;是伺服电机的一种&#xff0c;伺服电机就是带有反馈环节的电机&#xff0c;这种电机可以进行精确的位置控制或者输出较高的扭矩。舵机…

基于深度学习的图像识别技术与应用是如何?

基于深度学习的图像识别技术与应用在当今社会中扮演着越来越重要的角色。以下是对该技术与应用的详细解析&#xff1a; 一、技术原理 深度学习是一种模拟人脑处理和解析数据的方式的技术和方法论。在图像识别领域&#xff0c;深度学习主要通过深度神经网络&#xff08;如卷积…

我理解的文本表示模型

词袋模型与N-grams模型 1 词袋模型 (Bag of Words)1.1 one-hot 取值 (Binary)1.2 Term Frequency 取值 (TF)普通频数 r a w t f raw_{tf} rawtf​频率范数归一化对数频数 1.3 Inverse document frequency (IDF)1.4 TF-IDF scores 取值 N-Gram 最简单的文本建模场景&#xff1a…

定义多个类对象,分别输入和输出各对象中的时间(时:分:秒)

在前面的文章中&#xff0c;类中只有公用数据而无成员函数&#xff0c;而且只有1个对象。可以直接在主函数中进行输入和输出。若有多个对象&#xff0c;需要分别引用多个对象中的数据成员&#xff0c;可以写出如下程序&#xff1a; &#xff08;1&#xff09;编写程序&#xff…

stata17中java installation not found或java not recognozed的问题

此问题在于stata不知道去哪里找java,因此需要手动的告诉他 方法1&#xff1a; 1.你得保证已经安装并配置好java环境 2.在stata中输入以下内容并重启stata即可 set java_home "D:\Develope\JDk17" 其中java_home后面的""里面的内容是你的jdk安装路径 我的…

【Java算法】滑动窗口 上

&#x1f525;个人主页&#xff1a; 中草药 &#x1f525;专栏&#xff1a;【算法工作坊】算法实战揭秘 &#x1f456;一. 长度最小的子数组 题目链接&#xff1a;209.长度最小的子数组 算法原理 滑动窗口 滑动窗口算法常用于处理数组/字符串等序列问题&#xff0c;通过定义一…

IKVM.net调用Jar包实现SM4解密

近期&#xff0c;我深入学习了如何使用IKVM.net来调用Jar包&#xff0c;这次的学习经历让我对Java与.NET之间的互操作性有了更深刻的理解。IKVM.net作为一款强大的工具&#xff0c;为我们打通了Java与.NET之间的桥梁&#xff0c;使得在.NET环境中调用Java库变得简单而高效。 在…

生产环境安装odoo

odoo可以在多平台运行&#xff0c;但是在生产环境下官方不建议在Windows平台部署。在Windows下可能不能很好的支持一服务多worker的形式&#xff0c;更推荐在Linux下部署。 常见的Linux如Ubuntu、Debian等Debian系或Redhat系都能执行官网的包安装。 地址&#xff1a;Download |…

使用Jetpack Compose为Android App创建自定义页面指示器

使用Jetpack Compose为Android App创建自定义页面指示器 在现代移动应用中&#xff0c;页面指示器在提供视觉导航提示方面发挥着重要作用&#xff0c;帮助用户理解其在应用内容中的当前位置。页面指示器特别适用于顺序展示内容的场景&#xff0c;如图片轮播、图像库、幻灯片放…

Python3简单实现与Java的Hutool库SM2的加解密互通

1、背景&#xff1a; 因业务需求&#xff0c;需要与某平台接口对接。平台是Java基于Hutool库实现的SM2加密解密&#xff0c;研究了下SM2的加解密算法&#xff0c;网上找的资料&#xff0c;都是说SM2【椭圆曲线】 公钥长【x,y分量 64字节】&#xff0c;私钥短【32字节】&#x…