Prometheus
生态三大主要组件:Prometheus
、Grafana
、AlertManager
,这三大组件是基础,分别对应 数据存储,数据展示,告警管理。关于后续告警媒介触发和告警模版管理,由第三方组件完成,后续主要以 PrometheusAlert
组件做告警媒介触发和告警模版管理,至于告警降噪和值班调度和告警协调处理,可以采用 FlashDuty
或 PagerDuty
。
下面以部署三大主要组件开始,分别介绍在 CentOS 和 Ubuntu 系统下使用 Docker部署
和 二进制部署
详细步骤和踩坑说明。
系统初始化
CentOS 和 Ubuntu 进行最小化安装后,需要对系统做些初始化配置,主要有以下配置:
基础软件安装
# CentOS 7.9
sudo yum install -y wget curl vim lrzsz net-tools
# Ubuntu 22.04.2 LTS
sudo apt-get install -y wget curl vim lrzsz net-tools
防火墙关闭
# CentOS 7.9
sudo systemctl status firewalld.service
sudo systemctl stop firewalld.service
sudo systemctl disable firewalld.service
# Ubuntu
sudo ufw status
sudo ufw disable
主机名设置
# 设置主机名为prometheus-monitor
sudo hostnamectl --static set-hostname "prometheus-monitor"
# 查看主机名信息
sudo hostnamectl
# 开启新bash终端
bash
IP和DNS设置
# CentOS 7.9 ens192 是网络接口名称
sudo vim /etc/sysconfig/network-scripts/ifcfg-ens192
BOOTPROTO="static"
NAME="ens192"
DEVICE="ens192"
ONBOOT="yes"
IPADDR=172.16.1.1 # 更改为你内部网络的IP地址
PREFIX=24 # 更改为你内部网络IP地址掩码位
GATEWAY=172.16.1.254 # 更改为你内部网络IP地址的网关
# CentOS 7.9 DNS修改
sudo vim /etc/resolv.conf
nameserver 223.5.5.5 # 更改为你内部网络使用的DNS
nameserver 223.6.6.6 # 更改为你内部网络使用的DNS
# Ubuntu 22.04.2 LTS
sudo vim /etc/netplan/00-installer-config.yaml
编辑yaml文件,修改对应网卡信息
# ens160为网卡名称
network:
ethernets:
ens160:
dhcp4: false
dhcp6: no
addresses:
- 172.16.1.1/24 # 更改为你内部网络的IP地址和掩码位
routes:
- to: default
via: 172.16.1.254 # 更改为你内部网络IP地址的网关
nameservers:
addresses:
- 223.5.5.5 # 更改为你内部网络使用的DNS
- 223.6.6.6 # 更改为你内部网络使用的DNS
search: []
version: 2
renderer: networkd
时区设置
# CentOS 7.9和Ubuntu 22.04.2 LTS通用
# 查看系统版本
lsb_release -a
# 查看时间
date
# 检查时区
timedatectl
# 修改时区为亚洲上海
sudo timedatectl set-timezone Asia/Shanghai
网络时间设置
# CentOS 7.9 使用chrony作为时间同步工具
sudo yum install -y chrony
# 服务开启
sudo systemctl start chronyd
# 服务开机自启
sudo systemctl enable chronyd
# 服务状态
sudo systemctl status chronyd
# 编辑配置
sudo vim /etc/chrony.conf
server ntp.aliyun.com iburst
# 重启生效
sudo systemctl restart chronyd
# Ubuntu 22.04.2 LTS
# 同步网络时间
sudo vim /etc/systemd/timesyncd.conf
[Time]
NTP=ntp.aliyun.com
FallbackNTP=ntp1.aliyun.com,ntp2.aliyun.com,ntp3.aliyun.com,ntp4.aliyun.com,ntp5.aliyun.com
RootDistanceMaxSec=5
PollIntervalMinSec=32
PollIntervalMaxSec=2048
# 更新
sudo systemctl restart systemd-timesyncd.service
# 开启自动同步
sudo timedatectl set-ntp on
# 重启systemd-timesyncd服务
sudo systemctl restart systemd-timesyncd.service
# 开启24小时制
cat /etc/default/locale
sudo sed -i '1a\LC_TIME=en_DK.UTF-8' /etc/default/locale
修改软件镜像源
# CentOS 7.9 修改清华大学镜像源
sudo sed -e 's|^mirrorlist=|#mirrorlist=|g' \
-e 's|^#baseurl=http://mirror.centos.org/centos|baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos|g' \
-i.bak \
/etc/yum.repos.d/CentOS-*.repo
sudo yum makecache
sudo yum update
# Ubuntu 22.04.2 LTS
sudo mv /etc/apt/sources.list /etc/apt/sources.list.bak
sudo vim /etc/apt/sources.list
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu/ jammy-security main restricted universe multiverse
# deb-src http://security.ubuntu.com/ubuntu/ jammy-security main restricted universe multiverse
# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse
# # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse
# 更新
sudo apt-get update
如何嫌弃系统最小化安装初始化很麻烦,可以直接执行下面脚本做自定义配置,快捷简单:
wget https://gitee.com/robotneo/shell/raw/main/reset/v7/reset_v7_2.sh && chmod +x reset_v7_2.sh && ./reset_v7_2.sh
Docker Compose部署
安装Docker引擎
# CentOS 7.9
# 老版本卸载
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
# 添加镜像源
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 安装最新版本
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# 启动Docker
sudo systemctl start docker.service
# Ubuntu 22.04.2 LTS
# 老版本卸载
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done
# 安装依赖工具
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
# 添加镜像源
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
# 安装
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# 启动Docker
sudo systemctl start docker.service
编写Docker Compose文件,文件命名为compose.yml
# compose.yml
services:
prometheus:
#container_name: prometheus
#hostname: prometheus
image: quay.io/prometheus/prometheus:latest
user: root
volumes:
- /opt/prometheus/data:/prometheus/data
- /opt/prometheus/rules:/prometheus/rules
- /opt/prometheus/targets:/prometheus/targets
- /opt/prometheus/conf/prometheus.yml:/etc/prometheus/prometheus.yml:ro
- /etc/localtime:/etc/localtime:ro
ports:
- "9090:9090"
command:
- "--config.file=/etc/prometheus/prometheus.yml"
- "--storage.tsdb.path=/prometheus/data"
- "--storage.tsdb.retention.time=90d"
- "--enable-feature=remote-write-receiver"
- "--web.enable-admin-api"
- "--web.enable-lifecycle"
privileged: true
networks:
- promnet
restart: always
grafana:
#container_name: grafana
#hostname: grafana
image: grafana/grafana:latest
user: root
volumes:
- /opt/grafana/data:/var/lib/grafana
- /etc/localtime:/etc/localtime:ro
#- /opt/grafana/etc:/etc/grafana
ports:
- "3000:3000"
depends_on:
- prometheus
privileged: true
networks:
- promnet
restart: always
alertmanager:
# container_name: alertmanager
# hostname: alertmanager
image: quay.io/prometheus/alertmanager:latest
user: root
volumes:
- /opt/alertmanager/data:/var/lib/alertmanager
- /opt/alertmanager/conf/alertmanager.yml:/etc/alertmanager/alertmanager.yml:ro
- /etc/localtime:/etc/localtime:ro
ports:
- "9093:9093"
command:
- "--config.file=/etc/alertmanager/alertmanager.yml"
- "--storage.path=/var/lib/alertmanager"
privileged: true
networks:
- promnet
restart: always
networks:
promnet:
# 定义network的名称
name: monitor
# 默认使用bridge单个主机上的网络,overlay代表跨多个节点的网络群
driver: bridge
#external: true
新建挂载目录
mkdir -pv /opt/prometheus/{data,conf,rules,targets}
mkdir -pv /opt/grafana/data
mkdir -pv /opt/alertmanager/{data,conf}
新建初始启动配置文件
prometheus.yml
初始化配置信息,需要把文件放入 /opt/prometheus/conf
目录中。
# 全局配置文件
global:
scrape_interval: 15s # 设置数据采集间隔每次15s 默认1分钟
evaluation_interval: 15s # 用来控制评估规则的频率,prometheus 使用规则产生新的时间序列数据或者产生警报
scrape_timeout: 10s # 采集超时 默认10s
external_labels: # 外部标签 后续展开说明外部标签的使用场景
# 告警插件配置
alerting:
alertmanagers:
- static_configs:
- targets:
- 172.17.40.25:9093 # AlerManager服务IP+端口
# 按照设定参数进行扫描加载 用于自定义报警规则 其报警媒介和route路由由alertmanager插件实现
rule_files:
- "/prometheus/rules/*.yml"
# 设定采集对 这里既有静态设置也有设置动态服务发现(服务发现用于后续target更改只需要进行规则修改即可,不需要进Prometheus守护进程重启)
scrape_configs:
- job_name: "prometheus"
metrics_path: /metrics
scheme: http
static_configs:
- targets: ["172.17.40.25:9090"] # Prometheus服务IP+端口
alertmanager.yml
初始化配置信息,需要把文件放入 /opt/alertmanager/conf/
目录中。
route:
group_by: ['alertname']
group_wait: 30s
group_interval: 5m
repeat_interval: 1h
receiver: 'web.hook'
receivers:
- name: 'web.hook'
webhook_configs:
- url: 'http://127.0.0.1:5001/'
inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname', 'dev', 'instance']
Docker Compose启动
# 把配置放入在当前目录下 如:把compose.yml文件放入/opt 目录下
$ ls
alertmanager compose.yml grafana prometheus
$ pwd
/opt
# prometheus.yml放入/opt/prometheus/conf/中
# alertmanager.yml放入/opt/alertmanager/conf/中
# 启动 -p 代表docker compose的项目名称为prom
sudo docker compose -f compose.yml -p prom up -d
# 停止
sudo docker compose -p prom down -v
# 查看
sudo docker compose -p prom ps -a
Prometheus启动参数详细说明
# 指定 Prometheus 的配置文件路径
--config.file=/opt/prometheus/prometheus.yml
# 指定 Prometheus 时序数据的本地硬盘存储路径
--storage.tsdb.path=/opt/prometheus/data
# 启用生命周期管理相关的 API,比如调用 /-/reload 接口就需要启用该项
--web.enable-lifecycle
# 启用 remote write 接收数据的接口,启用该项之后,categraf、telegraf 等 agent 就可以通过 /api/v1/write 接口推送数据给 Prometheus
--enable-feature=remote-write-receiver
# 即时查询在查询当前最新值的时候,只要发现这个参数指定的时间段内有数据,就取最新的那个点返回,这个时间段内没数据,就不返回了
--query.lookback-delta=2m
# 启用管理性 API,比如删除时间序列数据的 /api/v1/admin/tsdb/delete_series 接口
--web.enable-admin-api
# 设置在 TSDB 中存储的时间序列数据的保留时间 d(天) w (周) h (小时)
--storage.tsdb.retention.time=90d
# Console Template是Prometheus内置的基础可视化方案 不过一般不用 直接使用Grafana作为数据可视化方案
# Console Template有关的两个启动参数为 其分别指定页面组件以及页面的存储路径
# 默认情况下其分别指向Prometheus当前安装路径的console_libraries和consoles目录
--web.console.libraries="console_libraries"
--web.console.templates="consoles"
Docker网络冲突解决
很多网工朋友们在初次使用 Docker
的使用,可能不太熟悉 Docker
的网络结构,故容易造成网段冲突,导致安装上 Docker
就断开与主机的连接,或者 Docker
网络无法出主机节点。
当安装 Docker
后,因为 Docker
默认 172.16.0.0/12
作为默认网卡网段 CIDR
,比如你当前主机网络中只有 C
类 CIDR
,那么 Docker
的默认桥接网卡就从 172.16.0.0/16
网段开始使用,如果检测到当前主机路由和 Docker
默认网卡有网段冲突, Docker
就会向后延伸,使用 172.17.0.0/16
的 CIDR
,如果还冲突,继续向后延伸使用 172.18.0.0/16
的 CIDR
,直到和当前主机网段没有冲突的路由为止。
如何指定Docker网桥网段,并保证和现网不冲突?
# 暂停docker0网卡
ifconfig docker0 down
# 添加/etc/docker/daemon.json文件并编辑不冲突的网段
sudo vim /etc/docker/daemon.json
{
"bip": "172.19.131.1/24",
"default-address-pools": [ {"base": "172.19.132.0/24", "size": 25 } ],
"registry-mirrors": ["https://xxxxx.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
# 说明
# bip:代表当前默认docker0网桥使用的地址段,必须是网关加掩码的方式:172.19.131.1/24 保证不和现网冲突即可
# default-address-pools:代表后续新起的网桥都用这里面定义的网段和掩码为基准:172.19.132.0/24 以25掩码为分割大小。
# registry-mirrors:替换为自己的阿里云镜像加速地址或者其他镜像加速地址
# 重启docker服务
sudo systemctl restart docker.service
服务端口设定
Prometheus默认端口:9090
Grafana默认端口:3000
AlertManager默认端口:9093
可以根据自身需求,进行自定义更改,如果做自定义更改,相应的配置文件和 docker compose
启动配置文件也要做相应改变。
二进制部署
在实际的生产环境中,建议使用二进制文件部署,或者通过 Kubernetes
部署(后续展开),在IT运维领域如果你不涉及 k8s
相关的监控,建议直接通过二进制部署单机版或者集群版本。
部署顺序:Prometheus、AlertManager、Grafana
首先我们需要下载二进制部署包,下面列出具体下载网址:
https://prometheus.io/download/
https://grafana.com/grafana/download
下载Prometheus和AlertManager,这里下载需要明确OS和Arch,一般默认都是 Linux
和 amd64
。
新建部署目录结构:
# 部署之前先规划好部署目录结构
mkdir -pv /opt/prometheus/{data,conf,rules,targets,deploy}
mkdir -pv /opt/alertmanager/{data,conf,deploy}
mkdir -pv /opt/grafana/{deploy,conf,data,logs,plugins,provisioning}
Prometheus部署
# 进入/opt/prometheus/deploy目录
cd /opt/prometheus/deploy
# 开源Github下载(如果没有反应 使用国内清华大学镜像源下载)
latest_release=$(curl -s https://api.github.com/repos/prometheus/prometheus/releases/latest | awk -F'"' '/tag_name/ {gsub(/v/, "", $4); print $4}')
echo "Latest Prometheus Version: $latest_release"
download_url="https://github.com/prometheus/prometheus/releases/download/v$latest_release/prometheus-$latest_release.linux-amd64.tar.gz"
# 下载
curl -LO $download_url
# 国内清华大学镜像源下载
latest_release=$(curl -s https://api.github.com/repos/prometheus/prometheus/releases/latest | awk -F'"' '/tag_name/ {gsub(/v/, "", $4); print $4}')
download_url="https://mirrors.tuna.tsinghua.edu.cn/github-release/prometheus/prometheus/LatestRelease/prometheus-$latest_release.linux-amd64.tar.gz"
curl -LO $download_url
# 解压
tar -zxvf prometheus-$latest_release.linux-amd64.tar.gz
# 在/opt/prometheus目录下创建一个名为 current 的符号链接,指向二进制包解压好的目录
ln -s /opt/prometheus/deploy/prometheus-2.48.0.linux-amd64 /opt/prometheus/current
# 当前/opt/prometheus的目录下目录结构如下
.
|-- conf
|-- current -> /opt/prometheus/deploy/prometheus-2.48.0.linux-amd64/
|-- data
|-- deploy
|-- rules
`-- targets
# 把上面初始化配置文件放入对应/opt/prometheus/conf目录下
/opt/prometheus/conf/prometheus.yml
# 添加systemd服务管理
# CentOS 7.9
sudo vim /usr/lib/systemd/system/prometheus.service
# Ubuntu 22.04.2 LTS
sudo vim /etc/systemd/system/prometheus.service
[Unit]
Description=Prometheus Server
Wants=network-online.target
After=network.target
[Service]
Type=simple
User=root
ExecStart=/opt/prometheus/current/prometheus --config.file=/opt/prometheus/conf/prometheus.yml --web.listen-address=:9090 --storage.tsdb.path=/opt/prometheus/data/ --storage.tsdb.retention=90d --enable-feature=remote-write-receiver --web.enable-lifecycle --web.enable-admin-api
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
[Install]
WantedBy=multi-user.target
# 配置生效
sudo systemctl daemon-reload
# 开机自启
sudo systemctl enable prometheus.service
# 启动
sudo systemctl start prometheus.service
# 状态
sudo systemctl status prometheus.service
# 停止
sudo systemctl stop prometheus.service
# 重启
sudo systemctl restart prometheus.service
AlertManager部署
# 进入/opt/alertmanager/deploy目录
cd /opt/alertmanager/deploy
# 开源Github下载
latest_release=$(curl -s https://api.github.com/repos/prometheus/alertmanager/releases/latest | awk -F'"' '/tag_name/ {gsub(/v/, "", $4); print $4}')
# 查看版本是否是自己需要的版本
echo "Latest AlerManager Version: $latest_release"
download_url="https://github.com/prometheus/alertmanager/releases/download/v$latest_release/alertmanager-$latest_release.linux-amd64.tar.gz"
# 下载
curl -LO $download_url
# 如果下载很慢 可以直接浏览器下载 然后上传到目录中 如:0.26.0版本
https://github.com/prometheus/alertmanager/releases/download/v0.26.0/alertmanager-0.26.0.linux-amd64.tar.gz
# 解压
tar -zxvf alertmanager-$latest_release.linux-amd64.tar.gz
# 在/opt/alertmanager目录下创建一个名为 current 的符号链接,指向二进制包解压好的目录
ln -s /opt/alertmanager/deploy/alertmanager-0.26.0.linux-amd64 /opt/alertmanager/current
# 当前/opt/alertmanager的目录下目录结构如下
.
|-- conf
|-- current -> /opt/alertmanager/deploy/alertmanager-0.26.0.linux-amd64/
|-- data
`-- deploy
# 把上面初始化配置文件放入对应/opt/alertmanager/conf目录下
/opt/alertmanager/conf/alertmanager.yml
# 添加systemd服务管理
# CentOS 7.9
sudo vim /usr/lib/systemd/system/alertmanager.service
# Ubuntu 22.04.2 LTS
sudo vim /etc/systemd/system/alertmanager.service
[Unit]
Description=alertmanager
[Service]
ExecStart=/opt/alertmanager/current/alertmanager --config.file=/opt/alertmanager/conf/alertmanager.yml
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
[Install]
WantedBy=multi-user.target
# 配置生效
sudo systemctl daemon-reload
# 开机自启
sudo systemctl enable prometheus.service
# 启动
sudo systemctl start prometheus.service
# 状态
sudo systemctl status prometheus.service
# 停止
sudo systemctl stop prometheus.service
# 重启
sudo systemctl restart prometheus.service
Grafana部署
# 进入/opt/grafana/deploy目录
cd /opt/grafana/deploy
# 开源Github下载
latest_release=$(curl -s https://api.github.com/repos/grafana/grafana/releases/latest | awk -F'"' '/tag_name/ {gsub(/v/, "", $4); print $4}')
# 查看版本是否是自己需要的版本
echo "Latest AlerManager Version: $latest_release"
# Enterprise 版本
download_url="https://dl.grafana.com/enterprise/release/grafana-enterprise-$latest_release.linux-amd64.tar.gz"
# OSS版本
download_url="https://dl.grafana.com/oss/release/grafana-$latest_release.linux-amd64.tar.gz"
curl -LO $download_url
# 解压
tar -zxvf grafana-$latest_release.linux-amd64.tar.gz
# 在/opt/grafana目录下创建一个名为 current 的符号链接,指向二进制包解压好的目录
ln -s /opt/grafana/deploy/grafana-10.2.2 /opt/grafana/current
# 当前/opt/grafana的目录下目录结构如下
.
|-- conf
|-- current -> /opt/grafana/deploy/grafana-10.2.2/
|-- data
|-- logs
|-- plugins
|-- provisioning
`-- deploy
# 配置文件
cp /opt/grafana/deploy/grafana-10.2.2/conf/defaults.ini /opt/grafana/conf/
# 修改配置
sudo vim /opt/grafana/conf/defaults.ini
[paths]
# Path to where grafana can store temp files, sessions, and the sqlite3 db (if that is used)
data = /opt/grafana/data
# Temporary files in `data` directory older than given duration will be removed
temp_data_lifetime = 24h
# Directory where grafana can store logs
logs = /opt/grafana/logs
# Directory where grafana will automatically scan and look for plugins
plugins = /opt/grafana/plugins
# folder that contains provisioning config files that grafana will apply on startup and while running.
provisioning = /opt/grafana/provisioning
Grafana的systemd服务配置
# 添加systemd服务管理
# CentOS 7.9
sudo vim /usr/lib/systemd/system/grafana-server.service
# Ubuntu 22.04.2 LTS
sudo vim /etc/systemd/system/grafana-server.service
[Unit]
Description=Grafana instance
Documentation=http://docs.grafana.org
Wants=network-online.target
After=network-online.target
After=postgresql.service mariadb.service mysql.service influxdb.service
[Service]
Type=simple
Restart=on-failure
WorkingDirectory=/opt/grafana
RuntimeDirectory=grafana
RuntimeDirectoryMode=0750
ExecStart=/opt/grafana/current/bin/grafana-server --config=/opt/grafana/conf/defaults.ini --pidfile=/opt/grafana/grafana-server.pid
LimitNOFILE=10000
TimeoutStopSec=20
CapabilityBoundingSet=
DeviceAllow=
LockPersonality=true
MemoryDenyWriteExecute=false
NoNewPrivileges=true
PrivateDevices=true
PrivateTmp=true
ProtectClock=true
ProtectControlGroups=true
ProtectHome=true
ProtectHostname=true
ProtectKernelLogs=true
ProtectKernelModules=true
ProtectKernelTunables=true
ProtectProc=invisible
ProtectSystem=full
RemoveIPC=true
RestrictAddressFamilies=AF_INET AF_INET6 AF_UNIX
RestrictNamespaces=true
RestrictRealtime=true
RestrictSUIDSGID=true
SystemCallArchitectures=native
UMask=0027
[Install]
WantedBy=multi-user.target
如果你需要安全用户启动,可以新建普通用户。
useradd -s /sbin/nologin -M prometheus
# 修改目录属主
chown -R prometheus:prometheus /opt/prometheus/
useradd -s /sbin/nologin -M alertmanager
# 修改目录属主
chown -R alertmanager:alertmanager /opt/alertmanager/
useradd -s /sbin/nologin -M grafana
# 修改目录属主
chown -R grafana:grafana /opt/grafana/
# systemd服务中也需要添加用户和属组 这个自行Google
写在最后
本文比较适合入门阅读,中大厂实际的监控架构往往很复杂,面对的监控对象是多方面的,比如:业务、中间件,基础设施,K8S等多方面对象,要考虑的点也是多方面的:
- 高可用问题
- 稳定性问题
- 资源成本问题
- 运维成本问题
- 使用体验问题
而重点需要关注的,监控集群稳定性问题,针对稳定性问题可能就要集群多活,比如两套采集侧,两套存储集群等等保证。因为性能问题和扩展性问题可能会根据实际情况引入第三方时序数据库,比如 VictoriaMetrics
,可能业务在多个云或IDC,故还需要考虑跨云或多region多活问题,整个集群架构还要构建用户配置中心和高基数问题等等。
要考虑的点很多,已经不是一两个人能搭建的,往往都是一个小团队进行全链路监控平台的建设,涉及各种中间件和二次开发等定制化需求。
不过大部分中小企业应该很少涉及如此复杂的监控平台需求,往往一台Prometheus或者一套联邦集群,考虑性能问题外加个第三方时序库,基本上就解决问题了。所以不要好高骛远,先从基础架构开始,从微小开始,不断改进才是脚踏实地的做法。