一、Prometheus与Grafana简介
Prometheus: 一个开源指标监控解决方案,指标就是指的CPU的使用率、内存使用率等数据.
Grafana: 是一个跨平台的开源的度量分析和可视化工具,可以通过将采集的数据查询然后可视化的展示,并及时通知.
Prometheus架构图:
二、监控系统部署
1、纯docker方式部署
创建一个文件夹用于存放prometheus的数据文件和配置文件:
mkdir -p /data/prometheus/data # 这个data文件夹共享给docker存放prometheus的数据
创建prometheus的配置文件prometheus.yaml:
vim /data/prometheus/prometheus.yaml
#############################################
global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['127.0.0.1:9090']
- job_name: 'node'
scrape_interval: 8s
static_configs:
- targets: ['xxx.xxx.xxx.xxx:9100'] # 此处我们先预留,等后面我们装好node_exporter后再回来配置
#############################################
docker方式启动node_exporter:
docker run --name node3 -d -p 9100:9100 prom/node-exporter
此时已经启动了一个监听代理node-exporter,我们通过访问 http://127.0.0.1:9100/metrics 来验证监听是否启动,出现如下信息证明node-exporter启动正常。
将node-exporter服务端口暴露给prometheus,去修改prometheus.yaml,保存后,我们就可以启动prometheus进行监控了:
vim /data/prometheus/prometheus.yaml
#############################################
global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['127.0.0.1:9090']
- job_name: 'node'
scrape_interval: 8s
static_configs:
- targets: ['127.0.0.1:9100'] # 此处我们先预留,等后面我们装好node_exporter后再回来配置
#############################################scrape_configs: - job_name: 'prometheus' static_configs: - targets: ['127.0.0.1:9090'] - job_name: 'node' scrape_interval: 8s static_configs: - targets: ['127.0.0.1:9100'] # 此处我们先预留,等后面我们装好node_exporter后再回来配置 ############################################# ```
docker方式启动prometheus:
docker run -d -p 9090:9090 -v /data/prometheus/data:/prometheus -v /data/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml --name pro prom/prometheus --config.file=/etc/prometheus/prometheus.yml
此时我们可以通过访问 http://127.0.0.1:9090/targets 来查看prometheus的运行状态。
此时我们看到node与prometheus两个节点的状态均为UP表示监控节点和主节点都正常运行起来了。
docker方式启动grafana:
docker run -p -d 3000:3000 --name grafana grafana/grafan
此时我们可以通过访问 http://127.0.0.1:3000/ 访问grafana,第一次使用还是要重置admin密码,初始账号密码均为admin。
配置prometheus监控增加数据源:
选择prometheus:
配置prometheus,填写prometheus地址,这个地方一定要填写docker分配给机器的那个网卡的ip,点击下方Save&Test进行测试:
引入监控模版:
输入8919,点击load:
选择我们创建好的data,给面板一个名称,点击import,监控面板创建成功。
然后我们就可以看到对这台机器的监控数据了。
2、K8s方式部署
创建namespace prometheus:
kubectl create namespace prometheus
创建一个文件夹用于存放prometheus的数据文件和配置文件:
mkdir -p /data/prometheus/data # 这个data文件夹共享给docker存放prometheus的数据
创建prometheus的配置文件prometheus.yaml:
vim /data/prometheus/prometheus.yaml
#############################################
global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['127.0.0.1:9090']
- job_name: 'node'
scrape_interval: 8s
static_configs:
- targets: ['xxx.xxx.xxx.xxx:9100'] # 此处我们先预留,等后面我们装好node_exporter后再回来配置
#############################################
启动node_exporter:
# 创建svc
apiVersion: v1
kind: Service
metadata:
name: exporter
namespace: prometheus
labels:
name: exporter
spec:
type: NodePort
ports:
- port: 9100
targetPort: 9100
protocol: TCP
nodePort: 31901
selector:
app: exporter
# 创建Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: exporter
namespace: prometheus
labels:
app: exporter
spec:
replicas: 1
selector:
matchLabels:
app: exporter
template:
metadata:
labels:
app: exporter
spec:
hostname: exporter
containers:
- image: prom/node-exporter
imagePullPolicy: IfNotPresent
name: grafana
ports:
- name: exporter-port
containerPort: 31901
将node-exporter服务端口暴露给prometheus,去修改prometheus.yaml,保存后,我们就可以启动prometheus进行监控了:
vim /data/prometheus/prometheus.yaml
#############################################
global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['127.0.0.1:9090']
- job_name: 'node'
scrape_interval: 8s
static_configs:
- targets: ['exporter.prometheus:31900'] # 此处我们先预留,等后面我们装好node_exporter后再回来配置
#############################################
启动prometheus:
# 创建svc
apiVersion: v1
kind: Service
metadata:
name: prometheus
namespace: prometheus
labels:
name: prometheus
spec:
type: NodePort
ports:
- port: 9090
targetPort: 9090
protocol: TCP
nodePort: 31900
selector:
app: prometheus
# 创建Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: prometheus
namespace: prometheus
labels:
app: prometheus
spec:
replicas: 1
selector:
matchLabels:
app: prometheus
template:
metadata:
labels:
app: prometheus
spec:
hostname: prometheus
containers:
- image: prom/prometheus
imagePullPolicy: IfNotPresent
name: grafana
ports:
- name: prometheus-port
containerPort: 9090
volumeMounts:
- mountPath: /prometheus
name: data
- mountPath: /etc/prometheus
name: config
volumes:
- name: data
hostPath:
path: /data/prometheus/data
type: Directory
- name: config
hostPath:
path: /data/prometheus/etc
type: Directory
# 此处创建prometheus 采用简易方式,简易实用configMap和NFS配合
启动grafana:
# 创建svc
apiVersion: v1
kind: Service
metadata:
name: grafana
namespace: prometheus
labels:
name: grafana
spec:
type: NodePort
ports:
- port: 3000
targetPort: 3000
protocol: TCP
nodePort: 30000
selector:
app: grafana
# 创建Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: grafana
namespace: prometheus
labels:
app: grafana
spec:
replicas: 1
selector:
matchLabels:
app: grafana
template:
metadata:
labels:
app: grafana
spec:
hostname: grafana
containers:
- image: grafana/grafana
imagePullPolicy: IfNotPresent
name: grafana
ports:
- name: grafana-port
containerPort: 3000
至此通过K8s创建完成,后续我们后补充一些报警相关内容,配置部分参考上面内容,唯一区别在于grafana配置prometheus地址时要写prometheus.prometheus:9090。