基于docker搭建监控系统&日志收集

简介: Prometheus 是一款由 SoundCloud 开发的开源监控报警系统及时序数据库(TSDB),支持多维数据模型和灵活查询语言,适用于大规模集群监控。它通过 HTTP 拉取数据,支持服务发现、多种图表展示(如 Grafana),并可结合 Loki 实现日志聚合。本文介绍其架构、部署及与 Docker 集成的监控方案。

什么是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

访问http://ip:9100/metrics

如下就是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配置文件复制下来配置邮件

找到邮件配置

#################################### 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。

相关文章
|
3天前
|
人工智能 JavaScript 测试技术
Qwen3-Coder入门教程|10分钟搞定安装配置
Qwen3-Coder 挑战赛简介:无论你是编程小白还是办公达人,都能通过本教程快速上手 Qwen-Code CLI,利用 AI 轻松实现代码编写、文档处理等任务。内容涵盖 API 配置、CLI 安装及多种实用案例,助你提升效率,体验智能编码的乐趣。
292 100
|
3天前
|
JSON fastjson Java
FastJson 完全学习指南(初学者从零入门)
摘要:本文是FastJson的入门学习指南,主要内容包括: JSON基础:介绍JSON格式特点、键值对规则、数组和对象格式,以及嵌套结构的访问方式。FastJson是阿里巴巴开源的高性能JSON解析库,具有速度快、功能全、使用简单等优势,并介绍如何引入依赖,如何替换Springboot默认的JackJson。 核心API: 序列化:将Java对象转换为JSON字符串,演示对象、List和Map的序列化方法; 反序列化:将JSON字符串转回Java对象,展示基本对象转换方法;
|
5天前
|
Android开发 开发者 Windows
这是我设计的一种不关机,然后改造操作系统的软件设计思路2.0版本
本文介绍了在不重启系统的情况下实现操作系统改造的两种方案。第一种方案通过SLFM Recovery模式,在独立于操作系统的最高权限环境下完成系统更新与改造,并支持断电恢复与失败回滚。第二种方案采用多分区机制,通过SLFM套件在独立分区中完成系统改造,适用于可中断与不可中断服务场景,确保系统更新过程的安全与稳定。
225 132
|
4天前
|
缓存 JavaScript 前端开发
JavaScript 的三种引入方法详解
在网页开发中,JavaScript 可通过内联、内部脚本和外部脚本三种方式引入 HTML 文件,各具适用场景。本文详解其用法并附完整示例代码,帮助开发者根据项目需求选择合适的方式,提升代码维护性与开发效率。
193 110

热门文章

最新文章