目录
4.1 prometheus配置中关联node exporter
5.3.1 查找Prometheus Dashboard 仪表盘
5.3 Grafana中导入Prometheus Dashboard 仪表盘
上篇简单讲了prometheus 相关架构,现在本篇讲prom环境的搭建。
搭建是基于《hualinux 进阶 1.7:kubeadm1.18搭建k8s群集》基础上进行安装的
一、安装环境
搭建是基于《hualinux 进阶 1.7:kubeadm1.18搭建k8s群集》基础上进行安装的,配置如下:
- 电脑一始,CPU支持VT,内存≥8G,可用磁盘空间大于60G
- 安装VMware Workstation虚拟机,我这里是vm10
- 创建3个虚拟机,安装CentOS-8.x-x86_64,我这里是centos8.2
主机名 | IP地址(NAT) | IP地址(内网) | 描述 |
vm82 | eth0:192.168.128.82 | eth1:192.168.3.82 | 最小化安装,2.6G内存,硬盘系统盘50G 充当master,最少2G内存 最好是3.5G或以上 |
vm821 | eth0:192.168.128.21 | eth1:192.168.3.21 | 最小化安装,2.1G内存,硬盘系统盘50G 充当node节点1 发现2G都卡,最好2.8G或以上 |
注:因我电脑是8G的,所以我只弄一个master和一个node节点
在上篇的构架图中,我只安装蓝色圆圈部分,如下图所示:
prometheus安装:这个是核心组件,肯定要安装的
exporters:中我只选择基础的 node_exporter,相当于zabbix的agent端。
ps:这种需要安装客户端的叫白盒安装,这样会得到很详细的信息。也有不需要安装客户的,只需要在prom服务器上安装blackbox_exporter,就实现状态的获取,叫黑盒。墨盒只能是通过命令或者第三方提供的状态去判断,比如通过HTTP、HTTPS、DNS、TCP、ICMP等方式对网络进行探测监控
Grafana:主要是数据展示使用的,prom已经自带web ui默认为9090端口
PS:
在Prometheus的架构设计中, Prometheus Server并不直接服务监控特定的目标,其主要任务负责数据的收集,存储并且对外提供数据查询支持。因此为了能够能够监控到某些东西,如主机的CPU使用率,我们需要使用到Exporter。Prometheus周期性的从Exporter暴露的HTTP服务地址(通常是/metrics )拉取监控样本数据。
Node Exporter可以采集到系统相关的信息,例如CPU、内存、硬盘等系统信息。Node Exporter采用Golang编写,并粗不存在任何的第三方依赖,只需要下载,解压即可运行。
二、安装prometheus server
在这里我直接使用二进制安装,如果人懒的话,当然也可以使用docker安装,安装在k8s master端上
2.1 安装prometheus(二进制)
打开prometheus下载页 ,我这里是intel cpu 64的系统,所以我下载的是amd64的tar.gz包,目前最新版本为prometheus-2.20.1.linux-amd64.tar.gz,执行命令如下:
mkdir -p /disk1/tools/
cd /disk1/tools/
#下载二进制包
wget https://github.com/prometheus/prometheus/releases/download/v2.20.1/prometheus-2.20.1.linux-amd64.tar.gz
#解压
tar -xf prometheus-2.20.1.linux-amd64.tar.gz
#安装第三方软件统一放
mkdir -p /disk1/app
mv prometheus-2.20.1.linux-amd64 /disk1/app/
cd /disk1/app/
#建立软链接
ln -s prometheus-2.20.1.linux-amd64 prometheus
#配置命令环境,这样可以直接使用
ln -s /disk1/app/prometheus/prometheus /usr/bin/prometheus
ln -s /disk1/app/prometheus/promtool /usr/bin/promtool
ln -s /disk1/app/prometheus/tsdb /usr/bin/tsdb
#建立相关启动服务
#建立存放数据的目录
mkdir -p /disk1/promData
#编写prom启动服务,可以支持start restart stop
cat>/etc/systemd/system/prometheus.service<<EOF
[Unit]
Description=Prometheus server daemon
After=network.target
[Service]
Type=simple
User=root
Group=root
ExecStart=/disk1/app/prometheus/prometheus \\
--config.file=/disk1/app/prometheus/prometheus.yml \\
--storage.tsdb.path=/disk1/promData \\
--web.listen-address=:9090
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
#查看
cat /etc/systemd/system/prometheus.service
#服务
systemctl daemon-reload
systemctl enable prometheus
systemctl start prometheus
systemctl status prometheus
注:也可以写详细一点,具体看prometheus --help,默认指定15天,连接数等,如:
#创建存放数据的目录 mkdir -p /disk1/promData #创建服务 cat>/etc/systemd/system/prometheus.service<<EOF [Unit] Description=Prometheus server daemon After=network.target [Service] Type=simple User=root Group=root ExecStart=/disk1/app/prometheus/prometheus \\ --config.file=/disk1/app/prometheus/prometheus.yml \\ --storage.tsdb.path=/disk1/promData \\ --storage.tsdb.retention.time=15d \\ --web.console.templates=/disk1/app/prometheus/consoles \\ --web.console.libraries=/disk1/app/prometheus/console_libraries \\ --web.max-connections=512 \\ --web.external-url="http:// 192.168.128.82:9090" \\ --web.listen-address=:9090 \\ Restart=on-failure [Install] WantedBy=multi-user.target EOF cat /etc/systemd/system/prometheus.service systemctl daemon-reload systemctl start prometheus #按ctrl+c退出 systemctl status prometheus
PS:启动相关说明,prometheus --help也有说明
选项
说明
ExecStart=/disk1/app/prometheus/prometheus 启动运行Prometheus程序所在的路径
--config.file=/disk1/app/prometheus/prometheus.yml 指定prometheus.yml配置文件路径
--storage.tsdb.path=/disk1/promData 指定监控指标数据存储的路径
--storage.tsdb.retention.time=15d 历史数据最大保留时间,默认15天
--web.console.templates=/disk1/app/prometheus/consoles 指定控制台模板目录路径
--web.console.libraries=/disk1/app/prometheus/console_libraries 指定控制台库目录路径
--web.max-connections=512 设置最大同时连接数
--web.external-url="http:// 192.168.128.82:9090" 用于生成返回Prometheus的相对和绝对链接地址,可以在后续告警通知内容中直接点击链接地址访问Prometheus Web UI
其格式: http:// {ip或者域名}:9090
--web.listen-address=:9090 Prometheus默认监控端口
2.2 通过web访问prom
打开本地浏览器输入 ip:9090,我这里是192.168.3.82:9090,默认取当 prometheus.yml 文件
PS:也可以在docer环境下安装:
docker run -p 9090:9090 -v /usr/local/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus
三、node Exporter
3.1 node Exporter安装
node_exporter采用Golang编写,并且不存在任何的第三方依赖,只需要下载,解压即可运行。
我在这里在k8s master和node节点上都安装,因为都要监控,安装命令如下:
#如果没有可以使用mkdir -p /disk1/tools 创建
cd /disk1/tools/
wget https://github.com/prometheus/node_exporter/releases/download/v1.0.1/node_exporter-1.0.1.linux-amd64.tar.gz
tar -xf node_exporter-1.0.1.linux-amd64.tar.gz
#安装第三方软件统一放
mkdir -p /disk1/app
mv node_exporter-1.0.1.linux-amd64 /disk1/app/
cd /disk1/app/
ln -s node_exporter-1.0.1.linux-amd64 node_exporter
#建立命令的软链接,这样就可以直接使用命令了
ln -s /disk1/app/node_exporter/node_exporter /usr/bin/node_exporter
建立相关服务
#建立相关服务
cat>/etc/systemd/system/node_exporter.service<<EOF
[Unit]
Description=node_exporter
Documentation=https:// prometheus.io/
After=network-online.target
[Service]
Type=simple
User=root
Group=root
ExecStart=/disk1/app/node_exporter/node_exporter
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
cat /etc/systemd/system/node_exporter.service
#服务重载入
systemctl daemon-reload
systemctl enable node_exporter
systemctl start node_exporter
systemctl status node_exporter
#查看端口,默认为9100
netstat -alntp|grep -i listen|grep node_exporter
3.2 通过web访问 node exporter
默认是ip:9100,我这里安装了2个,随便拿一个,我这里用192.168.3.82吧
下图中是一堆监控指标:
在web界面上我们可以看到很多相关的系统指标,从指标当中我们可以获得类似相关参数指标信息:
node_ boot_ time :系统启动时间
node_ cpu :系统CPU使用量
nodedisk :磁盘IO
nodefilesystem :文件系统用量
node_ load1 :系统负载
nodememeory :内存使用量
nodenetwork :网络带宽
nodetime : 当前系统时间
go : node exporter中go相关指标
process_ : node exporter自身进程相关运行指标...
PS:这个也可以使用docker安装
docker run -d -p 9100:9100 quay.io/prometheus/node-exporter
四、prom关联node exporter组件
4.1 prometheus配置中关联node exporter
prometheus关联组件很简单,只需要在 prometheus.yml 配置文件中 添加多一个job,再在job下添加targets,指定ip:port 即可
我这里机子少,先使用简单的,静态方式,至于动态方式的话,后面可以自己看我推荐的书《Prometheus监控技术与实践》我已经上专到csdn中可以点击下载
操作如下:
cd /disk1/app/prometheus/
#备份配置文件
cp prometheus.yml prometheus.yml.orig
#追加配置
#注意:cat后面是“>>”不是“>”,不要执行 2次
cat>>prometheus.yml<<EOF
- job_name: 'centos8'
static_configs:
- targets: ['192.168.3.82:9100','192.168.3.21:9100']
EOF
#最配置为
[root@vm82 prometheus]# cat prometheus.yml
# my global config
global:
scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
# scrape_timeout is set to the global default (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: 'centos8'
static_configs:
- targets: ['192.168.3.82:9100','192.168.3.21:9100']
[root@vm82 prometheus]#
#重启prometheus
systemctl restart prometheus
#按ctrl+c退出
systemctl status prometheus
PS:prometheus.yaml配置文件说明
global: #默认情况下抓取目标的频率. [ scrape_interval: <duration> | default = 1m ] # 抓取超时时间. [ scrape_timeout: <duration> | default = 10s ] # 评估规则的频率. [ evaluation_interval: <duration> | default = 1m ] # 与外部系统通信时添加到任何时间序列或警报的标签 #(联合,远程存储,Alertma# nager). external_labels: [ <labelname>: <labelvalue> ... ] # 规则文件指定了一个globs列表. # 从所有匹配的文件中读取规则和警报. rule_files: [ - <filepath_glob> ... ] # 抓取配置列表. scrape_configs: [ - <scrape_config> ... ] # 警报指定与Alertmanager相关的设置. alerting: alert_relabel_configs: [ - <relabel_config> ... ] alertmanagers: [ - <alertmanager_config> ... ] # 与远程写入功能相关的设置. remote_write: [ - <remote_write> ... ] # 与远程读取功能相关的设置. remote_read: [ - <remote_read> ... ]
4.2 prom web查看效果
登录 ip:9090,我这里是192.168.3.82:9090
先查看一下状态
点一下白色粗体“Prometheus” 即返回主页,操作如下:
上面中我们也可以选择一个指标,比如网络
五、Grafana图形展示安装
上面图中是prom自带的web UI,感觉还是不太好看,我们想要是zabbix那样炫酷的,那么Grafana就出场了。
5.1 Grafana基本概念
我们在操作Grafana的时候首先要简单了解一下它的基本概念:
Data Source:数据源一般多为时序数据。
Organization:支持多组织部署,组织可以理解为不同的部门,不同的需求方等。
User:用户名就是Grafana里的账户,一个用户可以属于一个或者多个组织,而且可以根据角色分配不同的权限。
Row:Row是一组Panels,是Dashboard的逻辑划分。一般来说,Rows都是12个单位的宽度,可以自适应大小屏幕。
Panel:Grafana里的基本图像模块,可以拖拽来调节大小和位置,有Graph,Singlestat,Dashlist,Table和Text几种类型。
Query Editor:可以编辑数据源的不同指标。
Dashboard:这个就很好理解了,通常意义上的仪表盘。可以使用Templating和Annotations。
Grafana还有很多高级的玩法,比如报警,模板,API等,入门篇里就不展开了。快来开始你的第一个炫酷的dashboard吧!
5.2 Grafana安装(yum)
5.2.1 Grafana yum安装及启动服务
打开Grafana官方说明文档,因为我的是centos,所以选择 Install on Linux
在进入的界面中我选择centos,这里有企业版本和oss版本,企业版收费的,我这里选择oss,按提示添加Grafana oss源
#添加yum源
cat>/etc/yum.repos.d/grafana.repo<<EOF
[grafana]
name=grafana
baseurl=https://packages.grafana.com/oss/rpm
repo_gpgcheck=1
enabled=1
gpgcheck=1
gpgkey=https://packages.grafana.com/gpg.key
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
EOF
cat /etc/yum.repos.d/grafana.repo
安装,可以使用 yum install grafana 直接安装了,发现太慢了,所以手工下载rpm文件安装,根据官网提示打开下载页 Grafana download page
然后找到centos,按提示执行如下命令:
#Red Hat, CentOS, RHEL, and Fedora(64Bit)
#SHA256: ed51839020e0c1d8dffcf550c7cedc20393b983551fd7756ce18a6078fe2d75a
#wget下载会有点慢,建议用迅雷下载好再上传
#注意:yum安装的时候一定要先安装yum源,否则无法解决依赖关系
wget https://dl.grafana.com/oss/release/grafana-7.1.3-1.x86_64.rpm
sudo yum install grafana-7.1.3-1.x86_64.rpm
安装完之后可以启动 Grafana
systemctl enable grafana-server
systemctl start grafana-server
systemctl status grafana-server
#发现默认是3000端口
netstat -alntp|grep -i listen|grep grafana
5.2.2 web登录Grafana
Grafana默认的web登录端口号为3000,登录方式为ip:3000,用户名和密码均为admin,这是根据 Grafana Getting started 中的 Log in for the first time 知道 的:
- Open your web browser and go to http://localhost:3000/.
3000
is the default HTTP port that Grafana listens to if you haven’t configured a different port.- On the login page, type
admin
for the username and password.- Change your password.
登录后界面,如下,是不是很酷:
上面图中灰色是没配置的,发现数据源没配置,还有课仪表盘dashboard等也没配置
5.3 配置Grafana监控
5.3.1 配置数据源
Grafana安装好之后需要配置一下数据源,这里指定是prometheus,这个数据源默认就是支持的
PS:如果找不到对应的数据源的话,需要安装Grafana插件,详见 Grafana plugins,比如zabbix默认就没有的,点中 zabbix,根据提示安装即可,很简单的,这里就不讲了。
操作如下:
PS:也可以使用如下操作,是一样的
其它不变,默认,最后点 Save&Test 即可
5.3.2 添加dashboards仪表盘
5.3.1 查找Prometheus Dashboard 仪表盘
手工为Grafana添加监控数据太烦麻了,我这里就不多说了放在下篇来解说,我们直接来简单的,使用Grafana 官方的 dashboards仪表盘,操作如下:
我在数据源选择Prometheus,会列出所有相关的,如下图所示,我这里选择中文的
5.3 Grafana中导入Prometheus Dashboard 仪表盘
我这里为了方便直接使用id号安装,先记住上面的id号为8919,接着返回到Grafana web界面导入上面的prometheus仪表盘,操作如下:
最终返回界面如下所示:
什么都帮你生成好了,下次如果想调出些界面,可以如下操作: