创建日期: 2024-05-17 09:35
tags:
- loki
- promtail
[!NOTE] Title
旨在搭建一个监控告警平台,包括了服务器系统,容器,日志收集,日志查看等功能。架构参考了
prometheus(数据处理)+node-exporter(数据采集)+grafan(图形化展示);
loki(数据处理)+promtail(数据采集)+grafana (图形化展示);
cadvisor(容器监控)+prometheus(数据处理)+grafana (图形化展示);
夜莺监控开源系统;
通过夜莺平台可以替代服务器状态的监控,暂时不能实现日志收集,不过集成了loki , 通过 loki+promtail的形式,在夜莺平台进行展示。不过夜莺平台生成的容器数量比较多,资源占用会比较大,不过平台功能也比较多,配置比prometheus+grafana更方便。展示更加直观。
目前已经有zabbix支持服务器的监控和告警,如果只是日志查看,只要部署promtail、loki和grafana就好了。相较于夜莺平台,资源占用和容器数量都相对来说少一点。
promethues部署
下载镜像
docker pull prom/node-exporter
docker pull prom/prometheus
docker pull grafana/grafana
启动主机监控代理node-exporter
docker run -d -p 9100:9100 \
--name=node-exporter \
-v "/proc:/host/proc:ro" \
-v "/sys:/host/sys:ro" \
-v "/:/rootfs:ro" \
prom/node-exporter
# 如果不监控主机,只查日志的话,可以不装。
# 通过网页查看监控数据:http://x.x.x.x:9100/metrics
启动prometheus
# 新建目录prometheus,编辑配置文件prometheus.yml
mkdir /opt/prometheus
cd /opt/prometheus/
vi prometheus.yml
# 这部分YML语法最好是手动输入一下,直接复制会导致语法错误。容器启动失败。
global:
scrape_interval: 60s
evaluation_interval: 60s
scrape_configs:
- job_name: prometheus
static_configs:
- targets: ['localhost:9090']
labels:
instance: prometheus
- job_name: linux
static_configs:
- targets: ['x.x.x.x:9100'] # 这里监控的是本机数据,其他主机可以继续添加targets
labels:
instance: localhost
prometheus启动命令
docker run -d \
-p 10050:9090 \
--name prometheus \
-v /data/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \
prom/prometheus
# 通过访问:http://x.x.x.x:10050/graph 查看页面
# 通过页面的status下面的targets来查看标签状态
启动grafana图形展示
docker run -d \
-p 10051:3000 \
--name grafana \
-e "GF_SERVER_ROOT_URL=http://grafana.server.name" \ # 可以自定义grafana服务器的URL
-e "GF_SECURITY_ADMIN_PASSWORD=********" \ # 这里配置自定义的密码 , 用户是admin
grafana/grafana
# 通过 访问 http://x.x.x.x:10051 , 用户名:admin ;密码:********
添加数据源
![[Pasted image 20240520115221.png]]
加载模板
这里试用了容器模板:模板ID:8321 ; LINUX模板ID:20389
![[Pasted image 20240520115330.png]]
LOKI简介
Loki聚合日志集成至grafana搭建
Loki简介
Loki的第一个稳定版本于2019年11月19日发布,是 Grafana Labs 团队最新的开源项目,是一个水平可扩展,高可用性,多租户的日志聚合系统。
Loki 由以下3个部分组成:
-
loki
是主服务器,负责存储日志和处理查询。 -
promtail
是代理,负责收集日志并将其发送给 loki 。 -
Grafana
用于 UI 展示。
相对于ELk对于小团队来说还是过于笨重,没有loki来的轻量,所以出于多方便考虑,小编还是选择了loki作为日志收集。
安装loki
创建目录
mkdir -p /data/loki && cd /data/loki
下载配置文件模板
sudo wget https://raw.githubusercontent.com/grafana/loki/v2.0.0/cmd/loki/loki-local-config.yaml -O loki-config.yaml sudo wget https://raw.githubusercontent.com/grafana/loki/v2.0.0/cmd/promtail/promtail-docker-config.yaml -O promtail-config.yaml
如果下载失败可去github复制
https://github.com/grafana/loki/blob/v2.0.0/cmd/promtail/promtail-docker-config.yaml
https://github.com/grafana/loki/blob/master/cmd/loki/loki-docker-config.yaml
启动容器
docker run -d --name loki \
--restart always \
-v /data/loki:/mnt/config \
-p 9200:3100 \
grafana/loki:latest \
-config.file=/mnt/config/loki-config.yaml
查看loki
(http://x.x.x.x:9200/ready)
显示ready
安装promtail
启动容器
docker run -d --name promtail \
--restart always \
-v /opt/data/loki:/mnt/config \
-v /var/log:/var/log \ # 这个目录是采集日志所在的目录,需要把宿主机上的日志目录映射到容器里的目录上
grafana/promtail:latest \
-config.file=/mnt/config/promtail-config.yaml
配置文件编辑
server:
http_listen_port: 9080
grpc_listen_port: 0
positions:
filename: /tmp/positions.yaml
clients:
- url: http://ip:9200/loki/api/v1/push
scrape_configs:
- job_name: system
static_configs:
- targets:
- localhost
labels:
job: varlogs
__path__: /var/log/** #扫描挂载目录下所有得log文件
添加数据源
查看日志
这里主要用到loki的查询语句,需要用标签名称进行查询
{job=“varlogs”} 为promtail配置里的名称,在prometheus里查看的时候注意一下时间区间。只显示时间区内的文件
= 完全相同
!= 不等于
=~ 正则表达式匹配
!~ 非正则匹配
{job="varlogs"} |= "error"
{filename="/var/log/nginx/access.log"} # 可以通过文件名称,来查看对应的日志
监控容器运行情况
安装docker监控agent
docker run -d
--volume=/:/rootfs:ro
--volume=/var/run:/var/run:ro
--volume=/sys:/sys:ro
--volume=/data/docker/:/var/lib/docker:ro # 这里注意容器的root目录,默认我们会修改默认目录到/data下面
--volume=/dev/disk/:/dev/disk:ro
--publish=9300:8080
--detach=true
--name=cadvisor
google/cadvisor:latest
在prometheus配置文件中增加监听项
- job_name: 'docker'
static_configs:
- targets: ['ip:9300']