loki日志管理系统

Loki是受Prometheus启发由Grafana Labs团队开源的水平可扩展,高度可用的多租户日志聚合系统。 开发语言: Google Go。它的设计具有很高的成本效益,并且易于操作。使用标签来作为索引,而不是对全文进行检索,也就是说,你通过这些标签既可以查询日志的内容也可以查询到监控的数据签,极大地降低了日志索引的存储。系统架构十分简单,由以下3个部分组成 :

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

只要在应用程序服务器上安装promtail来收集日志然后发送给Loki存储,就可以在Grafana UI界面通过添加Loki为数据源进行日志查询(如果Loki服务器性能不够,可以部署多个Loki进行存储及查询)。作为一个日志系统不关只有查询分析日志的能力,还能对日志进行监控和报警

二、系 统 架 构

loki日志管理系统

  1. promtail收集并将日志发送给loki的 Distributor 组件

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

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

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

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

三、安 装 示 例

1、示例安装环境:

服务器 系统 IP
loki主机 Centos 7.6 192.168.93.138
promtail主机 Centos 7.6 192.168.93.131

2、下载安装软件

wget "https://github.com/grafana/loki/releases/download/v1.5.0/loki-linux-amd64.zip"wget "https://github.com/grafana/loki/releases/download/v1.5.0/promtail-linux-amd64.zip"
wget https://dl.grafana.com/oss/release/grafana-6.7.4-1.x86_64.rpm

3、创建配置文件(loki.yaml和config.yaml)  存放目录:/etc/loki/

loki.yaml:

auth_enabled: false

server:
  http_listen_port: 3100

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: 2018-04-15
      store: boltdb
      object_store: filesystem
      schema: v9
      index:
        prefix: index_
        period: 168h

storage_config:
  boltdb:
    directory: /tmp/loki/index

  filesystem:
    directory: /tmp/loki/chunks

limits_config:
  enforce_metric_name: false
  reject_old_samples: true
  reject_old_samples_max_age: 168h

config.yaml:

# Promtail Server Config
server:
  http_listen_port: 9080
  grpc_listen_port: 0

# Positions
positions:
  filename: /tmp/positions.yaml

# Loki服务器的地址
clients:
  - url: http://127.0.0.1:3100/loki/api/v1/push

scrape_configs:
  - job_name: linux
    static_configs:
      - targets:
          - localhost
        labels:
          job: messages
          host: localhost
          __path__: /var/log/messages*

4、安装Grafana

#安装依赖
yum install initscripts fontconfig freetype urw-fonts
#安装
rpm -ivh grafana-6.7.4-1.x86_64.rpm
#启动
systemctl start grafana-server
#开启自启
systemctl enable grafana-server    

5、启动loki

 nohup ./loki-linux-amd64 -config.file=/etc/loki/loki.yaml &

 loki日志管理系统

6、启动promtail

nohup ./promtail-linux-amd64 -config.file=/etc/loki/config.yaml &

loki日志管理系统

7、重启Grafana

systemctl restart grafana-server

8、从浏览器打开grafana:http:IP:3000;默认登陆用户和密码:admin/admin

loki日志管理系统

  点击”Greate a data source“ 添加数据源选择loki模块;

loki日志管理系统

  添加HTTP的参数,然后”Save & Test“,然后进入"Explore"

loki日志管理系统

LOKI日志聚合系统安装和配置完成。

四、配置

从上面的步骤已经可以一窥使用方法了,如果要使用起来,我们还需要了解如下信息:

Loki 的配置

Loki的详细配置,可查看官方文档:https://github.com/grafana/loki/blob/master/docs/README.md

配置相关文档: https://github.com/grafana/loki/blob/v1.3.0/docs/configuration/README.md

我目前均保留了保留默认配置。

promtail的配置

promtail 是 Loki 的官方支持的日志采集端,在需要采集日志的节点上运行采集日志,再统一发送到 Loki 进行处理。我们编写的大多是这一部分。

官方配置说明: https://github.com/grafana/loki/blob/v1.3.0/docs/clients/promtail/configuration.md

除了使用Promtail,社区还有很多采集日志的组件,比如fluentd、fluent bit等,都是比较优秀的。

五、选择器

对于查询表达式的标签部分,将其包装在花括号中{},然后使用键值对的语法来选择标签,多个标签表达式用逗号分隔,比如:

{app="mysql",name="mysql-backup"}

目前支持以下标签匹配运算符:

  • =等于
  • !=不相等
  • =~正则表达式匹配
  • !~不匹配正则表达式

比如:

{name=~"mysql.+"}
{name!~"mysql.+"}

适用于Prometheus标签选择器规则同样也适用于Loki日志流选择器。

六、过滤器

编写日志流选择器后,您可以通过编写搜索表达式来进一步过滤结果。搜索表达式可以只是文本或正则表达式。
查询示例:

{job="mysql"} |= "error"
{name="kafka"} |~ "tsdb-ops.*io:2003"
{instance=~"kafka-[23]",name="kafka"} != kafka.server:type=ReplicaManager

过滤器运算符可以被链接,并将顺序过滤表达式-结果日志行将满足每个过滤器。例如:

{job="mysql"} |= "error" != "timeout"

已实现以下过滤器类型:

  • |= 行包含字符串。
  • != 行不包含字符串。
  • |~ 行匹配正则表达式。
  • !~ 行与正则表达式不匹配。
    regex表达式接受RE2语法。默认情况下,匹配项区分大小写,并且可以将regex切换为不区分大小写的前缀(?i)。

更多内容可参考官方说明

上一篇:int与String互转


下一篇:反转字符串中的单词