基于docker+Grafana+loki搭建监控系统&日志收集
Prometheus是由SoundCloud开发的开源监控报警系统和时序列数据库(TSDB)。Prometheus使用Go语言开发,是Google BorgMon监控系统的开源版本。2016年由Google发起Linux基金会旗下的原生云基金会(Cloud Native Computing Foundation), 将Prometheus纳入其下第二大开源项目。Prometheus目前在开源社区相
什么是Prometheus?
Prometheus是由SoundCloud开发的开源监控报警系统和时序列数据库(TSDB)。Prometheus使用Go语言开发,是Google BorgMon监控系统的开源版本。
2016年由Google发起Linux基金会旗下的原生云基金会(Cloud Native Computing Foundation), 将Prometheus纳入其下第二大开源项目。
Prometheus目前在开源社区相当活跃。
Prometheus和Heapster(Heapster是K8S的一个子项目,用于获取集群的性能数据。)相比功能更完善、更全面。Prometheus性能也足够支撑上万台规模的集群。
Prometheus的特点
- 多维度数据模型。
- 灵活的查询语言。
- 不依赖分布式存储,单个服务器节点是自主的。
- 通过基于HTTP的pull方式采集时序数据。
- 可以通过中间网关进行时序列数据推送。
- 通过服务发现或者静态配置来发现目标服务对象。
- 支持多种多样的图表和界面展示,比如Grafana等。
监控系统架构图

拉取镜像
docker pull prom/node-exporter
docker pull prom/prometheus
docker pull grafana/grafana
启动node-exporter
docker run -d -p 9100:9100 \
-v "/proc:/host/proc:ro" \
-v "/sys:/host/sys:ro" \
-v "/:/rootfs:ro" \
--net="host" \
prom/node-exporter
如下就是node-exporter作为agent收集到的可展示数据。

启动prometheus
新建目录prometheus,编辑配置文件prometheus.yml
mkdir /opt/prometheus
cd /opt/prometheus/
vi prometheus.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: ['ip:9100']
labels:
instance: localhost
注意:修改IP地址,这里的ip就是本机地址
启动prometheus
docker run -d \
-p 10050:9090 \
-v /opt/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \
prom/prometheus
等待几秒查询端口状态
netstat -anpt

访问url
http://ip:10050/graph

访问targets,url如下:
http://ip:10050/targets

启动grafana
$ docker run -d \
-p 10051:3000 \
--name=grafana \
-e "GF_SERVER_ROOT_URL=http://grafana.server.name" \
-e "GF_SECURITY_ADMIN_PASSWORD=admin" \
grafana/grafana
访问首页
http://ip:10051 admin admin

添加数据源


监测服务器负载配置
create->import填入8919模板引擎,选择prometheus数据源,就能加载出服务器负载到主页

监控主页

Loki聚合日志集成至grafana搭建
Loki简介
Loki的第一个稳定版本于2019年11月19日发布,是 Grafana Labs 团队最新的开源项目,是一个水平可扩展,高可用性,多租户的日志聚合系统。
Loki 由以下3个部分组成:
- loki是主服务器,负责存储日志和处理查询。
- promtail是代理,负责收集日志并将其发送给 loki 。
- Grafana用于 UI 展示。
相对于ELk对于小团队来说还是过于笨重,没有loki来的轻量,所以出于多方便考虑,小编还是选择了loki作为日志收集。
docker安装loki
1.1创建loki配置文件挂载目录
mkdir -p /opt/data/loki && cd /opt/data/loki
1.2下载配置文件模板
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
1.3启动&pull loki容器&promtail容器
docker run -d --name loki \
--restart always \
-v /opt/data/loki:/mnt/config \
-p 9200:3100 \
grafana/loki:latest \
-config.file=/mnt/config/loki-config.yaml
拉取promtail
docker run -d --name promtail \
--restart always \
-v /opt/data/loki:/mnt/config \
-v /opt/e2e/log:/var/log \
grafana/promtail:latest \
-config.file=/mnt/config/promtail-config.yaml
配置promtail配置文件
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监控数据源

查看日志

Alerting 报警配置
docker cp grafana:/etc/grafana/grafana.ini /opt/data/grafana/grafana.ini #将镜像中得grafana配置文件复制下来配置邮件
docker cp grafana:/etc/grafana/grafana.ini /opt/data/grafana/grafana.ini #将镜像中得grafana配置
找到邮件配置
#################################### SMTP / Emailing ##########################
[smtp]
enabled = true
host = smtp.163.com:25
user =xxx@163.com
# If the password contains # or ; you have to wrap it with triple quotes. Ex """#password;"""
password =xxxx
;cert_file =
;key_file =
skip_verify = true
from_address = xxx@163.com
from_name = xxx
# EHLO identity in SMTP dialog (defaults to instance_name)
;ehlo_identity = dashboard.example.com
# SMTP startTLS policy (defaults to 'OpportunisticStartTLS')
;startTLS_policy = NoStartTLS
打开alerting报警
#################################### Alerting ############################
[alerting]
# Disable alerting engine & UI features
;enabled = true
# Makes it possible to turn off alert rule execution but alerting UI is visible
execute_alerts = true
将grafana配置文件复制进容器,再重启容器
docker cp /opt/data/grafana/grafana.ini grafana:/etc/grafana/grafana.ini
配置Alerting服务

监控docker容器运行情况
安装docker监控agent
docker run -d \
--volume=/:/rootfs:ro \
--volume=/var/run:/var/run:ro \
--volume=/sys:/sys:ro \
--volume=/var/lib/docker/:/var/lib/docker:ro \
--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']

生成图表

至此基于docker搭建的监控系统以及日志收集就完成了,还可以扩展更多的内容到Grafana。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)