说到分布式日志存储系统,大家肯定对ELK
、EFK
、Graylog
这些工具并不陌生。可是它们都基于Elasticsearch
存储,搭建复杂不说,还非常耗资源。对于我们这种,做什么都要考虑成本的公司。当然是玩不起那么高大上的玩意儿了。所以,就考虑着手学习Grafana Labs
开源的Loki
Loki
使用标签来作为索引,而不是对全文进行检索,所以在搜索上会有一定的局限性。但是,也能满足我们的需求。搭建Loki
,我们需要安装三个组件,promtail
收集日志到Loki
,Loki
日志存储中心,Grafana
作为UI展示。
安装方式有多种,根据我目前的条件,选择了二进制安装方式。二进制文件可以去https://github.com/grafana/loki/releases/
下载,需要下载Loki
和promtail
,我这里安装的是2.7.3
版本
然后下载配置文件
1 2 3 wget https://raw.githubusercontent.com/grafana/loki/main/examples/getting-started/loki-config.yaml -O loki-config.yaml wget https://raw.githubusercontent.com/grafana/loki/main/examples/getting-started/promtail-local-config.yaml -O promtail-local-config.yaml
或者去https://grafana.com/docs/loki/latest/configuration/examples/
找一个合适自己的配置改改。
这里,我们先准备好Loki
和promtail
的配置文件loki-config.yaml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 server: http_listen_port: 3100 schema_config: configs: - from: 2021-08-01 store: boltdb object_store: filesystem schema: v11 index: prefix: index_ period: 24h ingester: lifecycler: address: 172.20.108.138 ring: kvstore: store: inmemory replication_factor: 1 final_sleep: 0s chunk_idle_period: 5m chunk_retain_period: 30s storage_config: boltdb: directory: /home/deployer/loki/store/index filesystem: directory: /home/deployer/loki/store/chunks limits_config: enforce_metric_name: false reject_old_samples: true reject_old_samples_max_age: 168h # 每个用户每秒的采样率限制 ingestion_rate_mb: 32 # 每个用户允许的采样突发大小 ingestion_burst_size_mb: 64 chunk_store_config: # 最大可查询历史日期 28天,这个时间必须是schema_config中的period的倍数,否则报错。 max_look_back_period: 672h # 表的保留期28天 table_manager: retention_deletes_enabled: true retention_period: 672h
promtail-local-config.yaml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 server: http_listen_port: 9080 grpc_listen_port: 0 positions: filename: /home/deployer/loki/positions.yaml clients: - url: http://172.20.108.138:3100/loki/api/v1/push tenant_id: tenant1 scrape_configs: - job_name: system pipeline_stages: static_configs: - labels: job: eisp # A `job` label is fairly standard in prometheus and useful for linking metrics and logs. host: 172.20.108.138 # A `host` label will help identify logs from this machine vs others __path__: /home/deployer/eisp-tomcat-8080/logs/*.out
启动loki
服务
1 ./loki-linux-amd64 -config.file=loki-config.yaml
启动promtail
服务
1 ./promtail-linux-amd64 -config.file=promtail-local-config.yaml
安装Grafana 首先去Grafana
官网下载二进制文件
Grafana
分Enterprise
版和OSS
,企业版当然是要收钱的,所以,我选择的开源版。根据官网提供的下载命令,下载并解压
1 2 wget https://dl.grafana.com/enterprise/release/grafana-enterprise-9.3.6.linux-amd64.tar.gz tar -zxvf grafana-enterprise-9.3.6.linux-amd64.tar.gz
在conf
目录中存放着各种配置,这里暂时以默认配置启动。直接在解压目录中执行bin/grafana-server web
即可启动
Grafana
默认端口是3000
,此时,我们访问ip:port
就会出现登录页面,默认用户名和密码都为admin
,登录成功后会跳转到密码修改页面。自行设置默认密码。进入主界面后,我们先添加一个Loki
的数据源
接下来,还有一个关键参数一定要加。在Header
上添加X-Scope-OrgID
参数,参数值根据实际情况填写,默认tenant1
,然后点击[Save&test
]
接下来,我们去查询收集到的日志
我们还可以模糊检索
其他更高级的用法则需要熟悉LogQL
,但是,其检索功能肯定不及ES
强大。这里仅是单节点,我们先观察一段时间。后续升级更新