大厂都在用的监控高可用方案,小公司还不赶紧学起来?

有一次在一家国企时,他们是使用的docker+nginx做为自己的“云”。同时,监控告警平台也不完善,虽然使用的是Prometheus+Grafana,但仅仅是用来“看大屏”。

同时所有的报警都是一个一个的脚本去写的,例如写一个python脚本去查询ES、查询MySQL,达到阈值调用一下钉钉webhook。并且散落在各台服务器上面。导致一人离职,其余人都不知道告警从哪里发出,整体瘫痪。

就,有种宝马车轱辘安装在奶奶家的二八大杠上面的感觉。

概览:

  1. Thanos 搭建Prometheus高可用
  2. 搭建minio云存储
  3. 搭建Dingtalk对接钉钉告警

Prometheus 介绍

Prometheus是 基于 Go 语言开发,是一套开源的系统监控报警框架,能轻松支持上万台规模的集群。

优点

  1. 支持多维度数据模型,由度量名键值对 组成的时间序列
  2. 支持 PromQL(Prometheus Queue language) 查询语言,结合数据标签实现数据的聚合、切割、切片等功能
  3. 支持 HTTP pull 方式和 PushGateway 方式采集数据
  4. 支持服务发现和静态配置两种发现方式
  5. 原生支持K8S以及Grafana

缺点

  1. 不支持大量历史数据的存储,长期存储数据建议采用 Influxdb、OpenTSDB 等
  2. 集群不太成熟

本文内容便是介绍如何解决以上缺点。

Thanos 介绍

Thanos 是一个「开源的,高可用的 Prometheus 系统,具有长期存储能力」。很多知名公司都在使用 Thanos,也是 CNCF 孵化项目的一部分。

Thanos 的一个主要特点就是通过使用对象存储(比如 S3)可以允许 “无限” 存储空间。对象存储可以是每个云提供商提供的对象存储也可以是 ceph、rook 或 minio 这样的解决方案。

讲的通俗一点,Thanos能够将Prometheus采集的数据进行汇总、去重。

Thanos 组件介绍

Thanos Store(存储)

Thanos 存储充当一个网关,将查询转换为远程对象存储。它还可以在本地存储上缓存一些信息。基本上,这个组件允许你查询对象存储以获取指标。这个组件充当 Thanos 查询的存储。

Thanos Compactor(压缩器)

将对象存储中的数据进行压缩和降低采样率,加速大时间区间监控数据查询的速度。

Thanos Sidecar

连接 Prometheus,将其数据提供给 Thanos Query 查询,并且/或者将其上传到对象存储,以供长期存储。

架构如下:

Thanos Query

Thanos Query(查询)是 Thanos 的主要组件,它是向其发送 PromQL 查询的中心点。Thanos 查询暴露了一个与 Prometheus 兼容的端点。然后它将查询分派给所有的 “stores”。记住,Store 可能是任何其他提供指标的 Thanos 组件。Thanos 查询可以发送查询到另一个 Thanos 查询(他们可以堆叠)。

Grafana 介绍

Grafana是一个开源的度量分析、监控可视化解决方案,支持很多种时序数据库,如graphite、InfluxDB、Prometheus、Elasticsearch等。

Dingtalk 介绍

搭建高可用监控

首先准备两台服务器,没太服务器上需要部署的环境如下:

服务器IP共同角色单独角色
10.0.1.35prometheus1,sidecar1,store1,query1,alertmanager1,grafana,compact,dingtalk
10.0.1.36prometheus2,sidecar2,store2,query2,alertmanager2

为了更便捷部署,已经将两份docker-compose文件放置于文末,分别在两台机器上执行即可。

主要修改位置如下:

#将文件中所有的ip替换成自己的服务器节点ip,例如:
command:- --config.file=/alertmanager/alertmanager.yaml- --storage.path=/alertmanager- --web.external-url=http://10.0.1.36:9093- --cluster.listen-address=0.0.0.0:9094- --cluster.advertise-address=10.0.1.36:9094- --cluster.peer=10.0.1.35:9094
#配置文件中所有的磁盘挂载,将/u01 改成自己的目录即可。
volumes:- /u01/prometheus:/prometheus
# 修改thanos_store 的存储位置
# 我个人使用的是金山云存储。
#若没有线上存储库,可自行搭建minio存储即可。
config:bucket: monitor-dataregion: BEIJINGendpoint: xxxaccess_key: xxxsecret_key: xxxinsecure: truesignature_version2: true

搭建minio

若没有线上存储桶,两台机器中单独找一台进行搭建即可(存储空间更大的那台)

创建成功后,将自己的存储桶endpoint、access_key、secret_key 替换docker-compose文件即可。

mkdir /data/domain_exporter/ -p
cat > /data/domain_exporter/start.sh << 'EOF'
docker run -d \
--name domain_exporter \
--restart=always \
-p 9222:9222 \
-v /etc/localtime:/etc/localtime:ro \
caarlos0/domain_exporter:v1
EOF
bash /data/domain_exporter/start.sh
  • 访问minio

http://47.92.133.104:9001

帐号 : admin

密码 : admin123456

  • 创建存储桶

Docker-compose 搭建高可用集群

docker-compose 文件中将dingtalk搭建已经注释掉了,若需要使用dingtalk组件发送告警信息,可去掉注释。

在服务器中分别执行文末的docker-compose文件

访问http://10.0.1.35:3000/login

访问http://10.0.1.35:10903/

访问http://10.0.1.35:9093/#/alerts

10.0.1.35

version: '2'
services:###################################### prometheus 1 on host 1 #####################################prometheus:image: prom/prometheus:v2.45.0container_name: prometheusnetwork_mode: hostrestart: always# ports:#   - "9090:9090"volumes:- /u01/prometheus:/prometheuscommand: - --config.file=/prometheus/prometheus.yaml- --storage.tsdb.path=/prometheus/data- --storage.tsdb.retention.time=30d- --storage.tsdb.min-block-duration=2h- --storage.tsdb.max-block-duration=2h- --storage.tsdb.no-lockfile- --web.listen-address=0.0.0.0:9090- --web.read-timeout=1m- --web.enable-admin-api- --web.max-connections=10- --query.max-concurrency=20- --query.timeout=2m- --web.enable-lifecycle - --log.level=info- --web.external-url=http://inside-prometheus.01zhuanche.com#  - --web.console.libraries=/usr/share/prometheus/console_libraries#  - --web.console.templates=/usr/share/prometheus/consoles###################################### thanos sidecar 1  on host 1 #####################################thanos_sidecar:image: thanosio/thanos:v0.32.5container_name: thanos_sidecarnetwork_mode: hostrestart: alwaysuser: nobodyvolumes:- /u01/prometheus:/prometheusenvironment:- REPLICA=Acommand:- sidecar- --log.level=debug- --tsdb.path=/prometheus/data- --prometheus.url=http://localhost:9090- --http-address=0.0.0.0:10902- --grpc-address=0.0.0.0:10901- --reloader.rule-dir=/prometheus/rules/- --reloader.config-file=/prometheus/prometheus.yaml.tmpl- --reloader.config-envsubst-file=/prometheus/prometheus.yaml#- --objstore.config-file=/prometheus/bucket_config.yaml- |--objstore.config=type: S3config:bucket: monitor-dataregion: BEIJINGendpoint: obs.cn-north-4.myhuaweicloud.comaccess_key: 0TN7LBPM3WPZRVNOXDCKsecret_key: RHiEj2Ph0797jWkKcbUHhUvEnteaB2GRLmd65ZkQinsecure: truesignature_version2: truedepends_on:- prometheus###################################### thanos store 1  on host 1 #####################################thanos_store:image: thanosio/thanos:v0.32.5container_name: thanos_storenetwork_mode: hostrestart: alwaysuser: nobodyvolumes:- /u01/thanos_store:/datacommand:- store- --log.level=debug- --data-dir=/data- --index-cache-size=500MB- --chunk-pool-size=500MB- --http-address=0.0.0.0:10906- --grpc-address=0.0.0.0:10905- |--objstore.config=type: S3config:bucket: monitor-dataregion: BEIJINGendpoint: obs.cn-north-4.myhuaweicloud.comaccess_key: 0TN7LBPM3WPZRVNOXDCKsecret_key: RHiEj2Ph0797jWkKcbUHhUvEnteaB2GRLmd65ZkQinsecure: truesignature_version2: truedepends_on:- prometheus###################################### thanos compact 1  on host 1 #####################################thanos_compact:image: thanosio/thanos:v0.32.5container_name: thanos_compactnetwork_mode: hostrestart: alwaysuser: nobodyvolumes:- /u01/thanos_compact:/datacommand:- compact- --log.level=debug- --data-dir=/data- --http-address=0.0.0.0:10907- --wait- |--objstore.config=type: S3config:bucket: monitor-dataregion: BEIJINGendpoint: xxxaccess_key: xxxsecret_key: xxxinsecure: truesignature_version2: truedepends_on:- prometheus###################################### thanos query 1  on host 1 #####################################     thanos_query:image: thanosio/thanos:v0.32.5container_name: thanos_querynetwork_mode: hostrestart: alwayscommand:- query- --query.replica-label=replica- --http-address=0.0.0.0:10903- --grpc-address=0.0.0.0:10904- --store=10.0.1.35:10901- --store=10.0.1.36:10901- --store=10.0.1.35:10905- --store=10.0.1.36:10905###################################### alertmanager 1  on host 1 #####################################alertmanager:image: prom/alertmanager:v0.25.0container_name: alertmanagernetwork_mode: hostrestart: alwaysvolumes:- /u01/alertmanager:/alertmanager# ports:#   - "9093:9093"command:- --config.file=/alertmanager/alertmanager.yaml- --storage.path=/alertmanager- --web.external-url=http://10.0.1.35:9093- --cluster.listen-address=0.0.0.0:9094- --cluster.advertise-address=10.0.1.35:9094- --cluster.peer=10.0.1.36:9094###################################### grafana  on host 1 #####################################grafana:image: grafana/grafana-oss:10.1.1-ubuntucontainer_name: grafananetwork_mode: hostrestart: alwaysuser: "0:0"# ports:#   - "3000:3000"# user: $(id -u)environment:- GF_SECURITY_ADMIN_USER=admin- GF_SECURITY_ADMIN_PASSWORD=admin- GF_PATHS_CONFIG=/var/lib/grafana/conf/grafana.ini- GF_PATHS_PROVISIONING=/var/lib/grafana/conf/provisioning- GF_PATHS_DATA=/var/lib/grafana/data- GF_PATHS_PLUGINS=/var/lib/grafana/data/pluginsvolumes:- /u01/grafana:/var/lib/grafanadepends_on:- prometheus########################################### prometheus dingtalk webhook  on host 1 ###########################################dingtalk-webhook:#  image: timonwong/prometheus-webhook-dingtalk:v2.1.0#  container_name: dingtalk-webhook#  network_mode: host# ports:#   - "8060:8060"#  volumes:#    - /u01/dingtalk-webhook:/etc/prometheus-webhook-dingtalk#  command:#    - --web.listen-address=:8060#    - --web.enable-ui#    - --web.enable-lifecycle#    - --config.file=/etc/prometheus-webhook-dingtalk/config.yaml#    - --log.level=info

10.0.1.36

version: '2'
services:###################################### prometheus 2 on host 2#####################################prometheus:image: prom/prometheus:v2.45.0container_name: prometheusnetwork_mode: hostrestart: always# ports:#   - "9090:9090"volumes:- /u01/prometheus:/prometheuscommand: - --config.file=/prometheus/prometheus.yaml- --storage.tsdb.path=/prometheus/data- --storage.tsdb.retention.time=1d- --storage.tsdb.min-block-duration=2h- --storage.tsdb.max-block-duration=2h- --storage.tsdb.no-lockfile- --web.listen-address=0.0.0.0:9090- --web.read-timeout=1m- --web.enable-admin-api- --web.max-connections=10- --query.max-concurrency=20- --query.timeout=2m- --web.enable-lifecycle- --log.level=info- --web.external-url=http://inside-prometheus.01zhuanche.com###################################### thanos sidecar 2  on host 2#####################################thanos_sidecar:image: thanosio/thanos:v0.32.5container_name: thanos_sidecaruser: nobodynetwork_mode: hostrestart: alwaysvolumes:- /u01/prometheus:/prometheusenvironment:- REPLICA=Bcommand:- sidecar- --log.level=debug- --tsdb.path=/prometheus/data- --prometheus.url=http://localhost:9090- --http-address=0.0.0.0:10902- --grpc-address=0.0.0.0:10901- --reloader.rule-dir=/prometheus/rules/- --reloader.config-file=/prometheus/prometheus.yaml.tmpl- --reloader.config-envsubst-file=/prometheus/prometheus.yaml- |--objstore.config=type: S3config:bucket: monitor-dataregion: BEIJINGendpoint: obs.cn-north-4.myhuaweicloud.comaccess_key: 0TN7LBPM3WPZRVNOXDCKsecret_key: RHiEj2Ph0797jWkKcbUHhUvEnteaB2GRLmd65ZkQinsecure: truesignature_version2: truedepends_on:- prometheus###################################### thanos store 2  on host 2 #####################################thanos_store:image: thanosio/thanos:v0.32.5container_name: thanos_storenetwork_mode: hostrestart: alwaysuser: nobodyvolumes:- /u01/thanos_store:/datacommand:- store- --log.level=debug- --data-dir=/data- --index-cache-size=500MB- --chunk-pool-size=500MB- --http-address=0.0.0.0:10906- --grpc-address=0.0.0.0:10905- |--objstore.config=type: S3config:bucket: monitor-dataregion: BEIJINGendpoint: xxxaccess_key: xxxsecret_key: xxxinsecure: truesignature_version2: truedepends_on:- prometheus###################################### thanos query 2  on host 2 #####################################     thanos_query:image: thanosio/thanos:v0.32.5container_name: thanos_querynetwork_mode: hostrestart: alwayscommand:- query- --query.replica-label=replica- --http-address=0.0.0.0:10903- --grpc-address=0.0.0.0:10904- --store=10.0.1.35:10901- --store=10.0.1.36:10901- --store=10.0.1.35:10905- --store=10.0.1.36:10905###################################### alertmanager 2  on host 2#####################################alertmanager:image: prom/alertmanager:v0.25.0container_name: alertmanagernetwork_mode: hostrestart: alwaysvolumes:- /u01/alertmanager:/alertmanager# ports:#   - "9093:9093"command:- --config.file=/alertmanager/alertmanager.yaml- --storage.path=/alertmanager- --web.external-url=http://10.0.1.36:9093- --cluster.listen-address=0.0.0.0:9094- --cluster.advertise-address=10.0.1.36:9094- --cluster.peer=10.0.1.35:9094

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/613398.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

卢森堡市场开发攻略,带你走进全球最富有的国家

卢森堡位于西欧&#xff0c;位于欧洲的十字路口&#xff0c;地理位置非常重要。卢森堡是高度发达的资本主义国家&#xff0c;人均gdp全球最高&#xff0c;是当之无愧的全球最富国家。卢森堡对外开放度高&#xff0c;很多产品依赖进口&#xff0c;也是一个非常不错的市场&#x…

医疗门诊诊所预约挂号视频问诊小程序开发

医疗门诊诊所预约挂号视频问诊小程序开发 医疗门诊诊所预约挂号视频问诊小程序开发 用户注册、登录&#xff1a;用户通过手机号注册、登录小程序账号&#xff0c;校验用户身份信息。预约挂号&#xff1a;用户选择就诊科室、日期和时间&#xff0c;预约医生门诊&#xff0c;并…

【OpenCV学习笔记06】- 制作使用轨迹条控制的调色板

这是对于 OpenCV 官方文档的 GUI 功能的学习笔记。学习笔记中会记录官方给出的例子&#xff0c;也会给出自己根据官方的例子完成的更改代码&#xff0c;同样彩蛋的实现也会结合多个知识点一起实现一些小功能&#xff0c;来帮助我们对学会的知识点进行结合应用。 如果有喜欢我笔…

简单易懂的PyTorch线性层解析:神经网络的构建基石

目录 torch.nn子模块Linear Layers详解 nn.Identity Identity 类描述 Identity 类的功能和作用 Identity 类的参数 形状 示例代码 nn.Linear Linear 类描述 Linear 类的功能和作用 Linear 类的参数 形状 变量 示例代码 nn.Bilinear Bilinear 类的功能和作用 B…

申请Certum IP证书的方法

Certum是波兰的一家数字证书颁发机构&#xff0c;可以为只有公网IP地址的网站提供IP证书的申请服务&#xff0c;为网站传输信息进行加密&#xff0c;提高网站SEO排名。Certum旗下的IP证书产品不多&#xff0c;其中比较受欢迎的就是DV基础型IP证书。今天就随SSL盾小编了解Certum…

社交通证经济学:Web3时代的社交奖励系统

Web3时代的到来带来了区块链技术和去中心化的新范式&#xff0c;社交媒体也在这场变革中经历着深刻的改变。 社交通证经济学作为Web3时代社交媒体的创新实践&#xff0c;重新定义了用户在平台上的价值和奖励体系。本文将深入探讨Web3时代社交通证经济学的背景、工作原理以及对…

最新版docker-compose安装

Ubuntu/Kali 下载安装最新版 docker-compose # FastGit加速 sudo curl -L "https://hub.fgit.cf/docker/compose/releases/download$(curl -L -i -s -o /dev/null -w "%{url_effective}\n" https://hub.fgit.cf/docker/compose/releases/latest | awk -F tag …

2024新年烟花代码完整版

文章目录 前言烟花效果展示使用教程查看源码HTML代码CSS代码JavaScript 新年祝福 前言 在这个充满希望和激动的2024年&#xff0c;新的一年即将拉开帷幕&#xff0c;而数字科技的创新与发展也如火如荼。烟花绚丽多彩的绽放&#xff0c;一直以来都是新年庆典中不可或缺的元素。…

学会这13个 Git 命令就够了!

提到版本控制工具Git&#xff0c;相信很多开发者都知道&#xff0c;其实我们在99%的日常时间里&#xff0c;只需要学会以下13个git命令就行了&#xff0c;让我们来一起看看吧&#xff01; 1、git init 这个命令是初始化一个新的Git仓库&#xff0c;即在当前目录中创建一个名为…

为什么伦敦金交易应该使用4小时以上的周期?

做伦敦金前&#xff0c;要先对市场走势进行分析。而分析市场总是涉及时间周期等问题&#xff0c;这也是投资者们存在疑惑的地方。到底我们需要选择什么时间周期呢&#xff1f;各人有个人的看法&#xff0c;而其中一种意见是&#xff0c;我们不应该使用低于4小时的周期&#xff…

【方差分析原理简介】

文章目录 方差分析&#xff08;Analysis of Variance&#xff0c;简称ANOVA&#xff09;1 方差分析流程2 借助sklean进行基于方差分析的特征筛选3 总结 方差分析&#xff08;Analysis of Variance&#xff0c;简称ANOVA&#xff09; 卡方检验更多的会考虑在衡量两个离散变量是…

【Java技术专题】「攻破技术盲区」攻破Java技术盲点之unsafe类的使用指南(打破Java的安全管控— sun.misc.unsafe)

Java后门机制 — sun.misc.unsafe 打破Java的安全管控关于Unsafe的编程建议实例化Unsafe后门对象使用sun.misc.Unsafe创建实例单例模式处理实现浅克隆&#xff08;直接获取内存的方式&#xff09;直接使用copyMemory原理分析 密码安全使用Unsafe类—示例代码 运行时动态创建类超…

敦煌网、国际站自养号测评:店铺销售怎么提高?

随着互联网的快速发展&#xff0c;电子商务成为了现代商业的重要组成部分。在众多电商平台中&#xff0c;敦煌网作为中国文化艺术产品的专业电商平台&#xff0c;吸引了大量消费者的关注。然而&#xff0c;如何提高敦煌网的销售业绩&#xff0c;成为了商家们共同面临的挑战。 …

diffusers加速文生图速度;stable-diffusion、PixArt-α

参考: https://pytorch.org/blog/accelerating-generative-ai-3/ https://colab.research.google.com/drive/1jZ5UZXk7tcpTfVwnX33dDuefNMcnW9ME?usp=sharing#scrollTo=jueYhY5YMe22 大概GPU资源8G-16G;另外模型资源下载慢可以在国内镜像:https://aifasthub.com/ 1、加速…

查看Linux磁盘空间

(1)、该命令会列出当前系统所有挂载的文件系统以及它们的使用情况&#xff0c;包括总容量、已用空间、可用空间、使用百分比等信息 df -h如果查看某一个文件夹的,可以 df -h folderName (2)、计算指定目录下所有文件和子目录所占用的磁盘空间大小&#xff0c;并以人类可读的格…

机器学习周刊 第4期:动手实战人工智能、计算机科学热门论文、免费的基于ChatGPT API的安卓端语音助手、每日数学、检索增强 (RAG) 生成技术综述

LLM开发者必读论文&#xff1a;检索增强&#xff08;RAG&#xff09;生成技术综述&#xff01; 目录&#xff1a; 1、动手实战人工智能 Hands-on Al2、huggingface的NLP、深度强化学习、语音课3、Awesome Jupyter4、计算机科学热门论文5、LLM开发者必读论文:检索增强 (RAG) 生…

Python基础(二十四、JSON和pyecharts)

文章目录 一、JSON1.JSON介绍2.JSON格式数据转化3.示例 二、pyecharts1.安装pyecharts包2.查看官方示例 三、开发示例 一、JSON 1.JSON介绍 JSON是一种轻量级的数据交互格式&#xff0c;采用完全独立于编程语言的文本格式来存储和表示数据&#xff08;就是字符串&#xff09;…

探索未来餐饮:构建创新连锁餐饮系统的技术之旅

随着数字化时代的发展&#xff0c;连锁餐饮系统的设计和开发不再仅仅关乎订单处理&#xff0c;更是一场充满技术创新的冒险。在本文中&#xff0c;我们将深入研究连锁餐饮系统的技术实现&#xff0c;带你探索未来餐饮业的数字化美食之旅。 1. 构建强大的后端服务 在设计连锁…

计算机网络-2021期末考试解析

【前言】 这个是计算机网络的正式试卷了。从形式上基本上跟今年考的一致。很具有参考性。 一、 简答题&#xff08;30 分&#xff0c;每题 5 分&#xff09; 1 、电路交换与分组交换各有什么优缺点&#xff1f;第 4 代蜂窝系统 -4G 采用的是全 IP 体系&#xff0c;这说明…

iPad Pro如何使用SSH远程连接服务器云端编程开发【内网穿透】

文章目录 1. 在iPad下载Code APP2.安装cpolar内网穿透2.1 cpolar 安装2.2 创建TCP隧道 3. iPad远程vscode4. 配置固定TCP端口地址4.1 保留固定TCP地址4.2 配置固定的TCP端口地址4.3 使用固定TCP地址远程vscode 正文开始前给大家推荐个网站&#xff0c;前些天发现了一个巨牛的 …