更新预告:即将更新配置alertmanager邮件告警,监控物理机状态,k8s状态,以及数据库、中间件等
文章目录
-
- 概述
- 环境准备
-
- 安装helm
- chart包下载
- 镜像同步
- 安装Prometheus
-
- 设置持久化存储
- 部署
- 创建NodePort
- 安装Grafana
-
- 创建Secret
- chart包参数设置
-
- 设置密码
- 设置持久化存储
- 部署
- 创建NodePort
- 配置dashboard
-
- 登录grafana
- 配置Data sources
- 导入dashboard模版
- 监控告警功能(后续更新)
-
- alertmanager邮箱告警配置
- prometheus告警规则配置
-
- 监控物理机状态
- 监控k8s状态
- 数据库及中间件的监控告警配置(后续更新)
-
- Mysql
- Redis
- kafka
- RabbitMQ
概述
本文采用helm安装Prometheus+Grafana,及数据库&中间件的exporter,并通过配置alertmanager及告警rules实现监控告警。其中所采用的helm仓库及chart包如下所示:
- helm仓库:
grafana: https://grafana.github.io/helm-charts
prometheus-community: https://prometheus-community.github.io/helm-charts
- chart包:
grafana/grafana
prometheus-community/prometheus
prometheus-community/prometheus-mysql-exporter
prometheus-community/prometheus-redis-exporter
prometheus-community/prometheus-kafka-exporter
prometheus-community/prometheus-rabbitmq-exporter
环境准备
安装helm
- 项目地址:https://github.com/helm/helm
- 安装:
# 下载(自行选择版本)
wget https://get.helm.sh/helm-v3.6.1-linux-amd64.tar.gz
# 解压
tar zxvf helm-v3.6.1-linux-amd64.tar.gz
# 安装
mv linux-amd64/helm /usr/local/bin/
# 验证
helm version
chart包下载
# 添加grafana和prometheus-community仓库
helm repo add grafana https://grafana.github.io/helm-charts
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
# 更新仓库
helm repo update
# 查询chart
helm search repo grafana
# 创建工作目录
mkdir -p workspace/[grafana,prometheus]
# 拉取所有的chart包(请放到相应的目录中)
helm pull grafana/grafana
helm pull prometheus-community/prometheus
helm pull prometheus-community/prometheus-mysql-exporter
helm pull prometheus-community/prometheus-redis-exporter
helm pull prometheus-community/prometheus-kafka-exporter
helm pull prometheus-community/prometheus-rabbitmq-exporter
# 分别解压
tar zxvf [压缩包]
镜像同步
- prometheus内嵌kube-state-metrics安装包,其使用的是gcr镜像,也是所有chart包中唯一的gcr镜像,可能会导致镜像拉取失败,因此有必要提前同步该镜像
- 编辑配置文件
已同步到个人阿里云镜像仓库
vim ~/workspace/prometheus/prometheus/charts/kube-state-metrics/values.yaml
# Default values for kube-state-metrics.
prometheusScrape: true
image:
repository: registry.cn-zhangjiakou.aliyuncs.com/lc-sc/kube-state-metrics
tag: v2.0.0
pullPolicy: IfNotPresent
安装Prometheus
- 进入工作目录,按需修改镜像,持久化存储,副本数等配置;
- 建议首次部署时直接修改values中的配置,而不是用–set的方式,这样后期upgrade不必重复设置。
cd ~/workspace/promethues/promethues
vim values.yaml
设置持久化存储
- 若无需持久化,将
设置为enabled
false
- 若使用文件存储,需将accessMode改为ReadWriteMany
- storageClass的创建请参考之前的文章
# 搜索持久化设置,VIM界面按Esc后输入(再按n搜索下一个):
/persistentVolume
# 总共有三处,分别为alertmanager,Prometheus server和pushgateway。
# 参考官方文档建议配置,本文开启alertmanager和Prometheus server的持久化
部署
# 创建命名空间
kubectl create ns prometheus
# 确保是在工作目录:~/workspace/prometheus/prometheus,helm部署
helm install prometheus -n prometheus .
- 部署完查看service,将会在grafana中配置数据源时用到
创建NodePort
亦可在values中设置
vim service-np.yaml
apiVersion: v1
kind: Service
metadata:
name: prometheus-server-np
namespace: prometheus
spec:
ports:
- name: http
port: 80
protocol: TCP
targetPort: 9090
nodePort: 30090
selector:
app: prometheus
component: server
release: prometheus
type: NodePort
kubectl apply -f service-np.yaml
- 访问prometheus控制台
安装Grafana
创建Secret
- 在grafana命名空间下新建secret,帐号密码:admin / grafana
kubectl create ns grafana
echo -n "admin" | base64
echo -n "grafana" | base64
vim secret.yaml
apiVersion: v1
kind: Secret
metadata:
name: grafana
namespace: grafana
type: Opaque
data:
admin-user: YWRtaW4=
admin-password: Z3JhZmFuYQ==
kubectl apply -f secret.yaml
chart包参数设置
- 进入工作目录,按需修改镜像,持久化存储,副本数等配置;
- 建议首次部署时直接修改values中的配置,而不是用–set的方式,这样后期upgrade不必重复设置。
cd ~/workspace/grafana/grafana
vim values.yaml
设置密码
admin:
existingSecret: "grafana" # 即之前创建的secret
userKey: admin-user
passwordKey: admin-password
设置持久化存储
- 若无需持久化,将
设置为enabled
false
- 若使用文件存储,需将accessMode改为ReadWriteMany
# 搜索持久化设置,VIM界面按Esc后输入:
/persistence
persistence:
type: pvc
enabled: true
storageClassName: nfs-sc
accessModes:
- ReadWriteOnce
size: 2Gi
部署
创建NodePort
亦可在values中设置
vim service-np.yaml
apiVersion: v1
kind: Service
metadata:
name: grafana-np
namespace: grafana
spec:
ports:
- name: service
port: 80
protocol: TCP
targetPort: 3000
nodePort: 30130
selector:
app.kubernetes.io/instance: grafana
app.kubernetes.io/name: grafana
type: NodePort
kubectl apply -f service-np.yaml
配置dashboard
登录grafana
帐号密码(之前自定义的secret): admin /grafana
配置Data sources
- 首先,获取prometheus的service地址
# 查询svc
kubectl get svc -n prometheus
# prometheus-server.prometheus:80
- 进入Data sources配置页面
- 添加Prometheus,URL填入prometheus的service(80端口可省略)
导入dashboard模版
- Data sources配置完成后,导入模版
- 导入模版:8919
8919:Node Exporter for Prometheus Dashboard CN v20201010
更多模版请参考官网网站:https://grafana.com/grafana/dashboards
- 数据源选择Prometheus,然后点击import
- 最终效果: