生产环境Prometheus监控架构记录
比如有 30 家客户,每一个客户都有自己的 Kubernetes 集群,部署方式千差万别,还有客户不使用 Kubernetes 的,使用虚拟机部署,那么怎么对这么多客户的机器、服务进行有效的监控,本文记录一下监控的架构方案。 监控架构图 说明:Prometheus Core 是一个核心的 Prometheus,所有其他 Prometheus 的数据都汇总到这里,查询、告警等都使用这个 Prometheus Prometheus Core这个是核心的 Prometheus,其他客户的 Prometheus 通过联邦接入或者 远程写 (remote write) 的方式来写入数据到这个 Prometheus 中。Prometheus Core 可以更换成 VictoriaMetrics 联邦接入配置 对应的 federate_http.yml 远程写入配置修改 Prometheus 启动参数,增加:--enable-feature=remote-write-receiver 启动参数。 Kubernetes 中部署有集群权限的 Prometheus适合有集群权限的 Promet...
使用snmp exporter对交换机、服务器等进行监控
安装到 GitHub 下载一个可执行文件,直接运行即可,或者使用 systemd 来运行,也可以直接部署到 Kubernetes 中。https://github.com/prometheus/snmp_exporter systemd 配置: 交换机或服务器打开 snmp 协议这一步需要在交换机或服务器的 ipmi 上配置,交换机这种网络设备一般都只支持 snmp 协议来获取数据,比如说每个接口的状态(有没有插网线等)对于服务器,像 cpu 占用率、内存使用率这些数据使用 node_exporter 就可以做,为啥还要使用 snmp_exporter 呢,snmp_exporter 可以做到一些底层的监控,比如说:风扇转速、电源是否有损坏的(一般服务器都有多个电源模块)、温度情况、磁盘阵列状态(是否有硬盘坏掉了,比如做了 raid1,坏了一块硬盘在软件层面是无感知的,但是需要及时更换硬盘了。) 打开 snmp 协议后,需要设置并记录一下团体名。 测试 snmp 命令示例: 生成配置文件snmp exporter 开源软件中有个 snmp generator ,可以用于生...
Windows 开机自启动配置位置
注册表方式系统 个人 只运行一次 新建字符串值 – 数值名称任意,数值数据为要启动的程序路径,如 C:\Program Files (x86)\WinHotKey\WinHotKey.exe或者命令行创建 reg add "HKLM\Software\Microsoft\Windows\CurrentVersion\Run" /f /v "数值名称" /t REG_SZ /d "程序启动路径" 文件方式开机自启动也会显示在开始菜单的 startup 文件夹里。这里启动的话,是以用户身份启动,如果需要管理员权限的软件会弹窗。 系统启动文件夹 个人启动文件夹 快速进入 startup 文件夹win+r 输入 shell:startup 服务方式待完善 定时任务方式定时任务方式启动有个好处,就是可以以管理员权限运行,不用用户授权,也就是不会 UAC 弹窗。按照如图配置即可。
Windows常见注册表位置
oem 信息添加 oem 信息 删除 OEM 信息 侧边栏的网盘链接(OneDrive 等) 开机自启动注册表配置系统 个人 只运行一次 新建字符串值 – 数值名称任意,数值数据为要启动的程序路径,如 C:\Program Files (x86)\WinHotKey\WinHotKey.exe或者命令行创建 reg add "HKLM\Software\Microsoft\Windows\CurrentVersion\Run" /f /v "数值名称" /t REG_SZ /d "程序启动路径" 登录界面不显示用户 IE 主页个人主页 系统主页 默认主页 Windows Defender关闭 Windows Defender 这种方法和直接修改组策略是一样的,家庭版不支持组策略可以使用这种方式
Prometheus的瞬时向量(Instant vector)和区间向量(Range vector)
在 Prometheus 的表达式语言中,表达式或子表达式包括以下四种类型之一: 瞬时向量(Instant vector) : 一组时间序列,每个时间序列包含单个样本,它们共享相同的时间戳。也就是说,表达式的返回值中只会包含该时间序列中的最新的一个样本值。而相应的这样的表达式称之为瞬时向量表达式。 区间向量(Range vector) : 一组时间序列,每个时间序列包含一段时间范围内的样本数据。 标量(Scalar) : 一个浮点型的数据值。 字符串(String) : 一个简单的字符串值。 瞬时向量 比如这样的,取值是一个值 区间向量指的是指定时间段的所有瞬时向量 PromQL 聚合操作例如:sum,min,max,count 等聚合函数,只能作用于瞬时向量上。
快速部署单节点kafka
如果需要集群部署的文档你可以在站内搜搜,之前写过。 单节点部署,不考虑高可用性,只求快速搭建出环境,一般都是自己开发或者运维做测试使用。或者业务的测试环境为了节省服务器资源采取的方案。不过我不一样,我们测试环境资源充足,我只是单纯的懒。 第一步 安装 Docker部署是基于 docker 来部署的,所以要先安装 docker,安装 docker 的过程可以看这个文档:快速搭建环境记录 第二步 选择镜像打开 docker 镜像仓库 https://hub.docker.com 找了找, 按照下载量排序,有以下几种,我选择 bitnami 打包的 kafka 第三步 编写启动脚本我个人不喜欢 docker-compose ,总觉得这个东西不伦不类的,论灵活不如 bash 脚本,论专业不如 Kubernetes 甚至 Docker Swarm,还不如自己写脚本来做。 需要创建一个 docker network ,默认的 bridge 网络不能通过 dns 名字找到对应的容器。 其中: kafka 的启动用户 id 是 1001,所以需要给 kafka-data 目录授权,不然可能...
yaml多行文本的写法和区别
直接看效果(pip install pyyaml): 输出结果: 结论在 YAML 中,|、|- 和 >- 都用于定义多行字符串,但它们的处理方式不同: | 保留换行符。 生成的字符串在每行的末尾保留换行符。 |- 类似于 |,但去掉最后的换行符。 结果中的最后一行不会有换行符。 >- 将换行符转换为空格。 结果中的所有行会被连接成一行,中间用空格分隔,最后一行也没有换行符。
Grafana 接入 LDAP 认证
Grafana 是一个非常好用的展示数据软件,我一直以为可以直接在设置里增加 ldap 配置,没想到啊没想到 必须要修改配置文件才能接入到 LDAP,还是记录一下吧,免得下次部署浪费时间。 我是在 Kubernetes 中部署的,数据存储用的是 MySQL,所以 Grafana 本身可以当作一个无状态服务来看待。也可以不做数据持久化。 先创建 ldap 配置文件这里包括 ldap 数据的映射关系,可以自己尝试修改调整。 创建 deployment 和 service 创建 ingress 验证 LADP 字段配置配置好以后,使用默认管理员账户登录: 默认账号密码:admin/admin 登录以后,在 管理 – 身份验证 – LDAP 里验证字段的映射情况。 LADP 用户权限调整默认情况下,权限是 viewer,只可以查看,不能编辑,系统后台也不能修改权限。如图: 需要到 ldap 来配置权限并同步到 Grafana,我们只希望 ldap 做个轻量的用户数据库,不希望赋予 ldap 太多的功能,这里我们直接修改数据库来修改权限。 先到 user 表查询用户 id 再到...
用Prometheus对nacos集群进行监控
参考官方文档:https://nacos.io/zh-cn/docs/monitor-guide.html 暴露 metrics 数据 需要修改配置文件,spring boot 支持通过环境变量来修改系统配置,在 Kubernets 环境下,可以通过增加环境变量的形式来暴露 metrics 数据。 增加环境变量后,nacos 服务会重启,重启后进入 Pod,执行命令查看是否有 metrics 数据: 数据接入 Prometheus自动接入或手动接入按照需求选择一个。 自动接入自动接入需要使用到 Prometheus 的自动发现机制,利用 servcie discovery endpoint 来接入,Prometheus 配置: 修改 nacos 的 service: 查看 Prometheus 的 targets: 手动接入如果由于种种原因不能自动发现,可以手动配置的方式来接入到 Prometheus Nacos metrics 含义jvm metrics 指标 含义 system_cpu_usage CPU 使用率 system_load_av...
在Kubernetes下收集ingress日志到Elasticsearch
本文 ingress 用的是 Nginx-ingress,普通的 Nginx 原理是一样的。容器运行时是 Docker。 ingress 配置ingress 需要调整一下日志格式,json 日志更有利于分析与处理。 filebeat 配置在 Linux 中,一切皆文件,那么 Pod 的控制台日志也是存储在文件里的,如果容器运行时用的是 Docker,默认使用的是 json 日志文件格式 "log-driver": "json-file" 日志在主机上的 /var/lib/docker/containers/xx/xx-json.log, 那么我们可以把这个目录挂载到 filebeat 容器中即可使用 filebeat 来搜集日志,但是这样不方便分辨是哪个容器的日志,Kubernetes 给我们创建了一个目录 /var/log/pods 这里文件目录都是以固定格式来显示的,可以根据文件名来分析是哪个 namespace 的哪个 pod 的日志了。还有个目录是 /var/log/containers/ 这个目录里面的文件是链接到 /var/...



