参考文档:
https://blog.csdn.net/tcy1429920627/article/details/109679363
Loki的GitHub地址:https://github.com/grafana/loki
配置文件官网地址:https://grafana.com/docs/loki/latest/installation/local/
Grafana下载官网:https://grafana.com/grafana/download
1. loki 与 promtail 的配置文件需要手动获取
wget github
2. promtail 的配置文件需要修改 clients
配置为 Loki服务器的ip地址
3. 想要添加不同节点的机器, 需要在节点中部署 promtail 并指向loki
4. 不同 job 需要指定不同的 labels 与 __path__
labels:
job: xxx
app: xxx
__path__: /xx/xxx/*log
5. grafana 是一个展示插件
需要配置数据源, 才能正确展示查询
6. 生成日志文件
echo "error May-20 15:21:14 === Started libdnf-0.39.1 ===" >> hawkey.log
7. 建议直接docker-compose 方式部署安装, 然后配置Grafana数据源使用即可
8. 文档中的服务器ip地址都已替换为1.1.1.1, 使用时请注意替换.
mkdir /data/test_grafanna
cd /data/test_grafanna
#下载安装grafana命令,下列命令执行成功后。
wget https://dl.grafana.com/oss/release/grafana-7.3.6-1.x86_64.rpm
sudo yum -y install grafana-7.3.6-1.x86_64.rpm
#启动grafana,grafana会占用服务器3000端口
systemctl start grafana-server.service
systemctl status grafana-server.service
rm -f grafana-7.3.6-1.x86_64.rpm
#下载压缩文件
curl -O -L "https://github.com/grafana/loki/releases/download/v2.0.0/loki-linux-amd64.zip"
curl -O -L "https://github.com/grafana/loki/releases/download/v2.0.0/promtail-linux-amd64.zip"
#解压文件
unzip "loki-linux-amd64.zip"
unzip "promtail-linux-amd64.zip"
#执行文件授权
chmod a+x "loki-linux-amd64"
chmod a+x "promtail-linux-amd64"
# 删除安装包
rm -f loki-linux-amd64.zip
rm -f promtail-linux-amd64.zip
查看 https://github.com/grafana/loki 项目, 根据目录找到对应的 yaml文件地址, 参考https://www.cnblogs.com/sanduzxcvbnm/p/14234953.html
wget --no-check-certificate https://raw.githubusercontent.com/grafana/loki/master/cmd/loki/loki-local-config.yaml
wget --no-check-certificate https://raw.githubusercontent.com/grafana/loki/master/clients/cmd/promtail/promtail-local-config.yaml
vim loki-local-config.yaml
# 去掉这几行, 否则会报错
wal:
enabled: true
dir: /tmp/wal
recover: true
vim promtail-local-config.yaml
# 修改 clients, 将host改为服务器地址
# 添加 scrape_configs 对应的 labels 进行日志收集
# 启动Loki命令 默认端口为 3100
nohup ./loki-linux-amd64 -config.file=loki-local-config.yaml > loki.log 2>&1 &
# 到收集日志的服务器上配置 Promtail 并启动,传输文件到收集日志的服务器。 Promtail默认端口是9080
nohup ./promtail-linux-amd64 -config.file=promtail-local-config.yaml > promtail.log 2>&1 &
详见下方
- 停止 grafana 服务
systemctl stop grafana-server.service
- 当前终端关闭 nuhup 任务
jobs
kill %1
kill %2
- 清理进程
ps -ef | grep loki
ps -ef | grep promtail
kill -9
官网: https://github.com/grafana/loki/blob/v1.5.0/docs/installation/docker.md
mkdir -p /data/loki/config && cd /data/loki/config
wget https://raw.githubusercontent.com/grafana/loki/v1.5.0/cmd/loki/loki-local-config.yaml -O loki-config.yaml
wget https://raw.githubusercontent.com/grafana/loki/v1.5.0/cmd/promtail/promtail-docker-config.yaml -O promtail-config.yaml
docker run -d --name loki \
-v /data/loki/config:/mnt/config \
-p 3100:3100 grafana/loki:1.5.0 \
-config.file=/mnt/config/loki-config.yaml
错误: failed parsing config: open /mnt/config/loki-config.yaml: permission denied
问题原因及解决办法
原因是CentOS7中的安全模块selinux把权限禁掉了,至少有以下三种方式解决挂载的目录没有权限的问题:
1.在运行容器的时候,给容器加特权,及加上 --privileged=true 参数:
docker run -i -t -v /soft:/soft --privileged=true 686672a1d0cc /bin/bash
2.临时关闭selinux:
setenforce 0
3.添加selinux规则,改变要挂载的目录的安全性文本
注意点:
启动容器时, 需要将日志所在文件夹映射至容器内部, 否则无法读取日志文件
docker run -d --name promtail \
-v /data/loki/config:/mnt/config \
-v /var/log:/var/log \
grafana/promtail:1.5.0 \
-config.file=/mnt/config/promtail-config.yaml
promtail作为日志收集代理可部署在任意要收集日志的节点上,配置文件中指定 loki 节点IP地址即可,另外需要挂载要收集的节点日志文件目录到 promtail 容器中。
docker run -d --name=grafana \
--restart always \
-p 3000:3000 \
-v grafana-storage:/var/lib/grafana \
grafana/grafana
http://1.1.1.1:3100/metrics
http://1.1.1.1:3100/ready
# ready
如果想要收集指定目录及所有子目录下以.log结尾的日志文件,修改promtail-config.yaml 配置文件:
# vim promtail-config.yaml
......
__path__: /var/log/**/*.log
详见下方配置数据源
http://1.1.1.1:3000/
docker-compose 文件 https://raw.githubusercontent.com/grafana/loki/v1.5.0/production/docker-compose.yaml 注意点: 容器运行时, 需要将日志所在文件夹映射至容器内部, 否则无法读取日志文件
$ wget https://raw.githubusercontent.com/grafana/loki/v1.5.0/production/docker-compose.yaml -O docker-compose.yaml
$ docker-compose -f docker-compose.yaml up
wget https://raw.githubusercontent.com/grafana/loki/v1.5.0/cmd/loki/loki-local-config.yaml -O loki-config.yaml
wget https://raw.githubusercontent.com/grafana/loki/v1.5.0/cmd/promtail/promtail-docker-config.yaml -O promtail-config.yaml
vim loki-local-config.yaml
# 去掉这几行, 否则会报错
wal:
enabled: true
dir: /tmp/wal
recover: true
vim promtail-local-config.yaml
# 修改 clients, 将host改为服务器地址
# 添加 scrape_configs 对应的 labels 进行日志收集
问题点:
使用 multiline 控制多行合并采集, 注意缩进与正则
一个奇怪的现象, 使用docker部署promtail采集, 如果发现loki中没有数据, 重启promtail容器后, 就又有了....
version: "3.6"
networks:
loki:
services:
loki:
image: grafana/loki
container_name: loki
volumes:
- $PWD:/etc/loki
ports:
- "3100:3100"
command: -config.file=/etc/loki/loki-config.yaml
networks:
- loki
promtail:
image: grafana/promtail
container_name: promtail
volumes:
- /var/log:/var/log
- $PWD:/etc/promtail
- /data/log/:/data/log/ # 该地址为映射 log 日志文件存放地址
command: -config.file=/etc/promtail/promtail-config.yaml
networks:
- loki
grafana:
image: grafana/grafana
container_name: grafana
ports:
- "3000:3000"
networks:
- loki
auth_enabled: false
server:
http_listen_port: 3100 # 这个不需要变化, 即使loki接收端口变, 他也不用改
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
max_transfer_retries: 0
schema_config:
configs:
- from: 2021-06-04
store: boltdb
object_store: filesystem
schema: v11
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
ingestion_rate_mb: 15
chunk_store_config:
max_look_back_period: 0s
table_manager:
retention_deletes_enabled: false
retention_period: 0s
server:
http_listen_port: 9080
grpc_listen_port: 0
positions:
filename: /etc/promtail/positions.yaml
sync_period: 10
clients:
- url: http://1.1.1.1:3100/loki/api/v1/push
scrape_configs:
- job_name: go_vmp_server
static_configs:
- targets:
- localhost
labels:
job: go_vmp_server
app: go_vmp_server
env: prod
__path__: /data/log/test/*log
pipeline_stages:
- match:
selector: '{job="go_vmp_server"}'
stages:
- regex:
expression: '.*'
- multiline:
firstline: '^\[\d{4}-\d{2}-\d{2}'
max_wait_time: 3s
docker-compose up -d
访问 Grafana web页面:http://1.1.1.1:3000/ 进行登录(账号密码都是admin)
点击 DATA SOURCES => Loki
填写 HTTP 地址, 数据源的访问地址(Lok:3100) => save
可以设置每页展示的数量, Maximum lines 会展示最新的日志行, 避免浏览器崩溃.
点击 Explore 即可查看日志了
可以基于文件名或标签查看:
{job="Promtail 设置的job名"}
{filename="配置中的日志文件名"}
docker-compose.yaml
文件version: "3.6"
services:
promtail:
image: grafana/promtail
container_name: promtail
volumes:
- $PWD:/etc/promtail
- /data/log:/data/log
command: -config.file=/etc/promtail/promtail-config.yaml
promtail-config.yaml
文件server:
http_listen_port: 9080
grpc_listen_port: 0
positions:
filename: /etc/promtail/positions.yaml
sync_period: 10
clients:
- url: http://1.1.1.1:3100/loki/api/v1/push
scrape_configs:
- job_name: go_vmp_server_access
static_configs:
- targets:
- localhost
labels:
job: go_vmp_server_access
env: access
__path__: /data/log/access/*log
pipeline_stages:
- match:
selector: '{job="go_vmp_server_access"}'
stages:
- multiline:
firstline: '^\[\d{4}-\d{2}-\d{2}'
max_wait_time: 3s
- job_name: go_vmp_server_app-out
static_configs:
- targets:
- localhost
labels:
job: go_vmp_server_app-out
env: app-out
__path__: /data/log/app-out/*log
pipeline_stages:
- match:
selector: '{job="go_vmp_server_app-out"}'
stages:
- multiline:
firstline: '^\[\d{4}-\d{2}-\d{2}'
max_wait_time: 3s
- job_name: go_vmp_server_error
static_configs:
- targets:
- localhost
labels:
job: go_vmp_server_error
env: error
__path__: /data/log/error/*log
pipeline_stages:
- match:
selector: '{job="go_vmp_server_error"}'
stages:
- multiline:
firstline: '^\[\d{4}-\d{2}-\d{2}'
max_wait_time: 3s
在启动docker容器之后, 要注意, 当前配置文件的环境在哪. 比如loki的配置文件中的 server:http_listen_port: , 是docker容器内的端口, 无需和宿主机的端口同步