Prometheus Grafana
通过 chatgpt 来引入一下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
Prometheus 和 Grafana 是一对强大的工具,经常被一起使用来监控和可视化各种系统和应用的性能指标。这两个工具可以协同工作,提供全面的监控解决方案,下面是关于每个工具的详细介绍:
Copilot
使用**web**
正在为你生成答案…
###### 由 Copilot 发送:
**Prometheus** 和 **Grafana** 确实是一对强大的组合,经常被一起使用来监控和可视化各种系统和应用的性能指标。以下是对这两个工具的详细介绍:
### Prometheus
Prometheus 是一个开源的监控系统和时序数据库,主要特点包括:
- **多维数据模型**:由度量名称和键值对标识的时间序列数据。
- **PromQL**:一种灵活的查询语言,可以利用多维数据完成复杂查询。
- **数据采集**:基于 HTTP 的 pull(拉取)方式采集时间序列数据,同时支持 PushGateway 组件收集数据。
- **服务发现**:支持通过静态配置或服务发现机制动态发现监控目标。
- [**告警管理**:通过 Alertmanager 组件进行告警的汇总和分发](https://blog.csdn.net/Mo_nor/article/details/139614521)[1](https://blog.csdn.net/Mo_nor/article/details/139614521)[2](https://blog.csdn.net/kft1314/article/details/140015246).
### Grafana
Grafana 是一个开源的可视化平台,主要用于展示从各种数据源(如 Prometheus、Graphite、Elasticsearch、InfluxDB 等)收集的数据。其主要特点包括:
- **丰富的仪表盘和图形编辑器**:可以创建和定制各种图表和仪表盘。
- **多数据源支持**:支持多种数据源的集成,提供统一的可视化界面。
- [**告警功能**:可以设置告警规则,并通过多种方式(如邮件、Slack 等)发送告警通知](https://blog.csdn.net/Mo_nor/article/details/139614521)[2](https://blog.csdn.net/kft1314/article/details/140015246)[3](https://cloud.tencent.com/developer/article/2245013).
### 协同工作
Prometheus 和 Grafana 通常协同工作,提供全面的监控解决方案:
1. **数据采集**:Prometheus 负责从各种监控目标(如服务器、应用程序、容器等)采集性能指标数据。
2. **数据存储**:Prometheus 将采集到的数据存储在其内置的时序数据库中。
3. **数据可视化**:Grafana 从 Prometheus 获取数据,并通过其强大的图形编辑器和仪表盘展示这些数据。
4. [**告警管理**:Prometheus 通过 Alertmanager 处理告警,Grafana 也可以配置告警规则并发送通知](https://blog.csdn.net/Mo_nor/article/details/139614521)[1](https://blog.csdn.net/Mo_nor/article/details/139614521)[2](https://blog.csdn.net/kft1314/article/details/140015246).
如果你有具体的使用场景或问题,欢迎分享,我可以提供更详细的帮助和建议。
[](https://blog.csdn.net/Mo_nor/article/details/139614521)[1](https://blog.csdn.net/Mo_nor/article/details/139614521): [](https://blog.csdn.net/Mo_nor/article/details/139614521)[2](https://blog.csdn.net/kft1314/article/details/140015246): [](https://blog.csdn.net/Mo_nor/article/details/139614521)[3](https://cloud.tencent.com/developer/article/2245013):
|
部署 Prometheus、Grafana
1. 选择 kube-prometheus 版本
![[image-20240830140417985.png]]
2.下载 kube-promethus
1
2
|
wget https://github.com/prometheus-operator/kube-prometheus/archive/refs/tags/v0.13.0.tar.gz
tar -zxf v0.13.0.tar.gz
|
3. 查看 kube-prometheus-0.13.0/manifests/目录
这个目录下负责初始化,涉及到一下内容
1
2
3
4
5
6
7
8
9
|
Custom Resource Definitions (CRDs):Prometheus Operator 使用 CRDs 来定义和管理 Prometheus、Alertmanager 实例以及相关的监控和告警规则。setup/ 通常包含这些 CRDs 的定义。
Prometheus Operator Deployment: 在部署 Prometheus 和 Alertmanager 实例之前,您首先需要部署 Prometheus Operator。setup/ 可能包含了 Prometheus Operator 的 Deployment 清单。
RBAC Resources: 这可能包括与 Prometheus Operator 和其他监控组件相关的 Roles, RoleBindings, ServiceAccounts 等。
Initial Configurations: 这可能包括一些初步的配置,如 ConfigMaps,用于初始化组件的设置。
在应用整个 manifests/ 目录之前,通常首先应用 manifests/setup/。这确保了所有必要的基础设施和设置都到位,然后再部署其他监控组件,例如 Prometheus、Alertmanager、Grafana 等。
|
4. 配置 Prometheus-server 存储持久化
因为 prometheus 是 Statefulset 部署模式, 这里使用 StorageClass 动态创建 PVC 方式(并不需要提前创建 PVC),并且命名规则会参考 POD 的命名。 修改内容如下:
nvim kube-prometheus-0.13.0/manifests/prometheus-prometheus.yaml
![[image-20240830141217501.png]]
5.配置 Grafana 存储持久化
由于 Grafana 资源 kind 是 Deployment,这里需要补充一个知识点:在 Kubernetes 的 YAML 中不能直接在 Deployment 的配置文件中声明 volumeClaimTemplate。volumeClaimTemplate 是专门用于 StatefulSets 中的,用来为每个 Pod 创建一个新的 Persistent Volume(PV)
, 所以我们提前为其创建一个 grafana-pvc.yaml 文件,加入下面 PVC 配置。
创建 manifests/grafana-pvc.yaml
![[image-20240830141358390.png]]
修改 manifests/grafana-deployment.yaml,将上面创建name: grafana
的 volume 配置在 grafana-deployment.yaml 中,内容如下:
1
2
3
4
5
6
7
8
|
# 原文内容
- emptyDir: {}
ame: grafana-storage
# 将上面原文内容 修改为下面内容,注意 claimName。
- name: grafana-storage
persistentVolumeClaim:
claimName: grafana
|
# 若 monitoring 命名空间不存在,则创建 kubectl create namespace monitoring kubectl apply -f grafana-pvc.yaml
6. 将 Prometheus,Grafana 的 service Type 设置 NodePort
vim manifests/prometheus-service.yaml
源文件为:
![[image-20240830141933832.png]]
修改成如下样子
1
2
3
4
5
6
7
8
9
10
11
12
|
spec:
type: NodePort # 新增
ports:
- name: web
port: 9090
targetPort: web
nodePort: 32101 # 新增
- name: reloader-web
port: 8080
targetPort: reloader-web
nodePort: 32102 # 新增
selector:
|
![[image-20240830142114666.png]]
nvim manifests/grafana-service.yaml
![[image-20240830142243667.png]]
修改后的样子
![[image-20240830142340082.png]]
7. 修改副本数
-
nvim manifests/prometheus-prometheus.yaml 将 replicas
设置为 1 (默认是 2)
-
nvim manifests/prometheusAdapter-deployment.yaml 将 replicas
设置为 1 (默认是 2)
-
nvim manifests/alertmanager-alertmanager.yaml 将 replicas
设置为 1 (默认是 3)
8.部署
1
2
3
4
5
6
7
8
|
kubectl apply --server-side -f manifests/setup
kubectl wait \
--for condition=Established \
--all CustomResourceDefinition \
--namespace=monitoring
kubectl apply -f manifests/
|
9.删除 networkpolicy
1
|
[root@k8s01 ~]# kubectl delete networkpolicy --all -n monitoring networkpolicy.networking.k8s.io "alertmanager-main" deleted networkpolicy.networking.k8s.io "blackbox-exporter" deleted networkpolicy.networking.k8s.io "grafana" deleted networkpolicy.networking.k8s.io "kube-state-metrics" deleted networkpolicy.networking.k8s.io "node-exporter" deleted networkpolicy.networking.k8s.io "prometheus-adapter" deleted networkpolicy.networking.k8s.io "prometheus-k8s" deleted networkpolicy.networking.k8s.io "prometheus-operator" deleted
|
10. 处理镜像
1
|
for image in $(cat images-list.txt); do skopeo copy docker://${image} docker://10.7.20.12:5000/${image#*/} --insecure-policy --dest-tls-verify=false; done
|
images.list
1
2
3
4
5
6
7
8
9
10
11
12
13
|
quay.io/brancz/kube-rbac-proxy:v0.14.2
quay.io/brancz/kube-rbac-proxy:v0.14.2
quay.io/brancz/kube-rbac-proxy:v0.14.2
quay.io/brancz/kube-rbac-proxy:v0.14.2
quay.io/brancz/kube-rbac-proxy:v0.14.2
quay.io/brancz/kube-rbac-proxy:v0.14.2
quay.io/brancz/kube-rbac-proxy:v0.14.2
quay.io/prometheus/alertmanager:v0.26.0
quay.io/prometheus-operator/prometheus-config-reloader:v0.67.1
registry.k8s.io/prometheus-adapter/prometheus-adapter:v0.11.1
registry.k8s.io/kube-state-metrics/kube-state-metrics:v2.9.2
docker.io/jimmidyson/configmap-reload:v0.5.0
docker.io/grafana/grafana:9.5.3
|
替换对应的镜像。
访问对应的界面
10. 访问界面
gafana: http://10.7.10.196:32103
![[image-20240830150454411.png]]
默认账户和密码: admin/admin
![[image-20240830150527584.png]]
- Prometheus Web: http://10.7.10.196:32101
![[image-20240830150608276.png]]
![[image-20240830150631488.png]]
参考记录 L
http://xinzhuxiansheng.com/articleDetail/122
卸载
1
|
kubectl delete -f manifests/setup
|