一、prometheus
prometheus
1,二进制
2、部署再k8s集群当中,pod形式部署
开源的系统监控和告警。
在k8s分布式的容器化管理系统当中,一般都是搭配prometheus来进行监控。
服务监控系统(监控主机),自带数据库,时序数据库:提供了数据模型和采集的指标项,存储,查询接口。
1.1、prometheus组件
promql语句,如何采集和统计。
nodeexporter:在k8s集群当中部署在node节点上,用来收集节点上的数据(主机指标,pod的使用情况)。
需要部署在每个节点上。
pushgateway:把数据上传到prometheus,然后再根据promql语句来分类的展示。
1.2、promtheus的特点:
1、1、多维的数据模型,按照顺序记录,记录设备状态的变化,为每个数据指定一个样本:服务器的指标,应用性能的监控,网络数据。
2、内置时间序列----TSDB
3、promql
4、http协议拉取数据
5、自带服务自带发现功能
6、grafana插件可以更人性化的展示指标数据。
1.2.1、TSDB:
1、存储量级非常大
2、涉及读很少,大部分写入操作
3、写入操作时按照时序进行添加
4、高并发性能很强大
Alertmanager:
Alertmanager:告警管理,是一个独立的模块,需要独立的配置,电子邮件,钉钉,企业微信。
(面试)Prometheus和zabbix的区别:
1、指标采集的方式
zabbix分为服务端和客户端,agent都属部署在客户端,然后把数据发送到服务端。tcp协议通信,ip+端口
prometheus根据客户端进行数据收集,服务端和客户端进行交互,pull的方式获取监控指标。基于http协议通信的。
2、数据存储:
zabbix使用外部数据库存储数据,mysql postgreSQL oracle。都是关系型数据库。
Prometheus自带内置的时序数据库,(TSDB)-----只支持存储时间序列大的值。
3、查询性能:
zabbix查询功能较弱
prometheus的查询功能更强大,速度更快
4、告警功能
都是内置告警功能,一样都是邮件,电话等等。
prometheus不能打电话。
5、监控的内容
zabbix主要是为了监控设备(服务器的状态)cpu----内存----硬盘-----网络流量----自定义的监控项(非虚拟化部署的程序。)
zabbix的时间更长,更成熟,适用于监控方面要求不高,只需要对服务设备监控的场景
监控pod缺点:反应太慢。兼容性比较差
Prometheus:专门为k8s定制的监控软件,对于容器产品兼容度更好。定制化程度更高,更适用微服务场景。
promql
二、安装Prometheus
主节点三个压缩包
-rw-r--r--. 1 root root 10181045 9月 18 10:01 node_exporter-1.5.0.linux-amd64.tar.gz
-rw-r--r--. 1 root root 91189594 9月 18 10:02 prometheus-2.45.0.linux-amd64.tar.gz
-rw-r--r--. 1 root root 55051732 9月 18 10:02 grafana-enterprise-7.5.11-1.x86_64.rpm
从节点一个node_exporter压缩包
-rw-r--r--. 1 root root 10181045 9月 18 10:01 node_exporter-1.5.0.linux-amd64.tar.gz
[root@master01 opt]# tar -xf prometheus-2.45.0.linux-amd64.tar.gz
[root@master01 opt]# mv prometheus-2.45.0.linux-amd64 prometheus
[root@master01 opt]# ll
cat > /usr/lib/systemd/system/prometheus.service <<'EOF'
[Unit]
Description=Prometheus Server
Documentation=https://prometheus.io
After=network.target
[Service]
Type=simple
ExecStart=/opt/prometheus/prometheus \
--config.file=/opt/prometheus/prometheus.yml \
--storage.tsdb.path=/opt/prometheus/data/ \
--storage.tsdb.retention=15d \
--web.enable-lifecycle
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
[root@master01 opt]# systemctl daemon-reload
[root@master01 opt]# systemctl restart prometheus.service
[root@master01 opt]# netstat -antp | grep 9090
tcp6 0 0 :::9090 :::* LISTEN 97254/prometheus
[root@master01 opt]# cd prometheus/
[root@master01 prometheus]# ls
console_libraries data NOTICE prometheus.yml
consoles LICENSE prometheus promtool
[root@master01 prometheus]# vim prometheus.yml
配置文件
# my global config
global:
#全局的配置,对所有生效
scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
##采集主机监控数据的间隔时间,15s采集一次
evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
#触发警告的时间间隔,间隔时间15s
# scrape_timeout is set to the global default (10s).
scrape_timeout: 10s
#数据采集的超时时间:10s
# Alertmanager configuration
alerting:
#告警的实例配置
alertmanagers:
- static_configs:
- targets:
# - alertmanager:9093
# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
#加载告警的规则:
# - "first_rules.yml"
# - "second_rules.yml"
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
#配置采集的数据源
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: "prometheus"
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ["localhost:9090"]
- job_name: nodes
metrics_path: "/metrics"
#采集数据的默认路径
static_configs:
- targets:
- 192.168.168.81:9100
- 192.168.168.82:9100
- 192.168.168.83:9100
labels:
service: kubernetes
-----------------三台主机-------------
[root@master01 prometheus]# cd /opt/
[root@master01 opt]# tar -xf node_exporter-1.5.0.linux-amd64.tar.gz
[root@master01 opt]# mv node_exporter-1.5.0.linux-amd64 node_exporter-1.5.0
[root@master01 opt]# cd node_exporter-1.5.0/
[root@master01 node_exporter-1.5.0]# ls
LICENSE node_exporter NOTICE
[root@master01 node_exporter-1.5.0]# mv node_exporter /usr/local/bin/
[root@master01 node_exporter-1.5.0]# ls
LICENSE NOTICE
cat > /usr/lib/systemd/system/node_exporter.service <<'EOF'
[Unit]
Description=node_exporter
Documentation=https://prometheus.io/
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/node_exporter \
--collector.ntp \
--collector.mountstats \
--collector.systemd \
--collector.tcpstat
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
[root@master01 node_exporter-1.5.0]# systemctl restart node_exporter
[root@master01 node_exporter-1.5.0]# netstat -antp | grep 9100
tcp6 0 0 :::9100 :::* LISTEN 109986/node_exporte
[root@node01 node_exporter-1.5.0]# systemctl daemon-reload
[root@node01 node_exporter-1.5.0]# systemctl restart node_exporter
[root@node01 node_exporter-1.5.0]# netstat -antp | grep 9100
tcp6 0 0 :::9100 :::* LISTEN 129341/node_exporte
[root@node02 node_exporter-1.5.0]# systemctl daemon-reload
[root@node02 node_exporter-1.5.0]# systemctl restart node_exporter
[root@node02 node_exporter-1.5.0]# netstat -antp | grep 9100
tcp6 0 0 :::9100 :::* LISTEN 110382/node_exporte
[root@master01 node_exporter-1.5.0]# systemctl restart node_exporter
[root@master01 node_exporter-1.5.0]# netstat -antp | grep 9100
tcp6 0 0 :::9100 :::* LISTEN 109986/node_exporte
[root@master01 node_exporter-1.5.0]# systemctl restart prometheus.service
[root@master01 node_exporter-1.5.0]# netstat -antp | grep 9100
tcp6 0 0 :::9100 :::* LISTEN 109986/node_exporte
[root@master01 node_exporter-1.5.0]# netstat -antp | grep 9090
tcp 0 0 127.0.0.1:34240 127.0.0.1:9090 TIME_WAIT -
tcp6 0 0 :::9090 :::* LISTEN 117770/prometheus
[root@master01 node_exporter-1.5.0]# yum -y install ntpdate
安装完成浏览192.168.168.81:9090
时间不同步导致的
[root@master01 node_exporter-1.5.0]# yum -y install ntpdate
安装grafana
[root@master01 node_exporter-1.5.0]# cd /opt/
[root@master01 opt]# rpm -ivh grafana-enterprise-7.5.11-1.x86_64.rpm
警告:grafana-enterprise-7.5.11-1.x86_64.rpm: 头V4 RSA/SHA256 Signature, 密钥 ID 24098cb6: NOKEY
准备中... ################################# [100%]
正在升级/安装...
1:grafana-enterprise-7.5.11-1 ################################# [100%]
### NOT starting on installation, please execute the following statements to configure grafana to start automatically using systemd
sudo /bin/systemctl daemon-reload
sudo /bin/systemctl enable grafana-server.service
### You can start grafana-server by executing
sudo /bin/systemctl start grafana-server.service
POSTTRANS: Running script
[root@master01 opt]# systemctl daemon-reload
[root@master01 opt]# systemctl restart grafana-server.service
[root@master01 opt]# netstat -antp | grep 3000
tcp6 0 0 :::3000 :::* LISTEN 2017/grafana-server
浏览器访问http://192.168.168.81:3000/
密码admin
官网
https://grafana.com/grafana/dashboards
##下载监控模板