跳到主要内容

实战-Centos安装prometheus-grafana-2020.11.27(测试成功)

实战-Centos安装prometheus-grafana-2020.11.27(测试成功)

image-20210131210103201

这节课我们来学习二进制安装prometheus,然后使用Node Exporter来采集主机信息,由prometheus server来定时向node exporter拉取数据并使用Grafana进行图形化的展示。

目录

[toc]

实验环境

  • 本次使用3台centos7.7虚机来搭建实验;(2个target,1个prometheus server);因为是实验环境,虚机计算规格可随便选择;
  • 本次涉及软件包如下:
grafana-7.2.1.linux-amd64.tar
node_exporter-1.0.1.linux-amd64.tar
prometheus-2.23.0.linux-amd64.tar

模板文件:`主机基础监控(cpu,内存,磁盘,网络).json`,将其导入即可;
  • 本次3台机器ip规划如下:
#本次次prometheus server主机名设置为:prometheus,其余2个target节点主机名如下:
hostnamectl --static set-hostname prometheus
exec bash
hostnamectl --static set-hostname node1
exec bash
hostnamectl --static set-hostname node2
exec bash

#配置ip过程省略:
192.168.10.10 prometheus
192.168.10.11 node1
192.168.10.12 node2

#本次虚机网卡选择为nat模式,仅主机模式也行,只要保证他们之间能互访即可;
  • 初始化配置
#另建议:关闭防火墙/NetwokManager/selinux(3台都需要配置)
systemctl stop firewalld#如果未关闭防火墙的话,其9090端口将无法访问;
systemctl disable firewalld

systemctl stop NetworkManager
systemctl disable NetworkManager

setenforce 0
sed -i s/SELINUX=enforcing/SELINUX=disabled/ /etc/selinux/config

实验软件

1、安装prometheus server(以下操作均在prometheus节点操作)

Prometheus基于Golang编写,编译后的软件包,不依赖于任何的第三方依赖。用户只需要下载对应平台的二进制包,解压并且添加基本的配置即可正常使用Prometheus Server。

1.1 下载安装包

prometheus的官网https://prometheus.io/ image-20210131210148384 安装包下载链接https://prometheus.io/download/ image-20210131210205206

截止目前(2020年11月30日)最新的二进制包版本是[prometheus-2.23.0.linux-amd64.tar.gz],链接如下:

https://github.com/prometheus/prometheus/releases/download/v2.23.0/prometheus-2.23.0.linux-amd64.tar.gz

1.2 解压

首先,将刚下载好的prometheus-2.23.0.linux-amd64.tar.gz软件包上传到192.168.10.10-prometheus机器上,再执行如下命令:

[root@prometheus ~]# mv prometheus-2.23.0.linux-amd64.tar.gz /usr/local/
[root@prometheus ~]# cd /usr/local/
[root@prometheus local]# tar xf prometheus-2.23.0.linux-amd64.tar.gz
[root@prometheus local]# ls
bin games lib libexec prometheus-2.22.0.linux-amd64.tar.gz share
etc include lib64 prometheus-2.22.0.linux-amd64 sbin src
[root@prometheus local]# mv prometheus-2.23.0.linux-amd64 prometheus

1.3 配置说明

解压后在prometheus的安装目录/usr/local/prometheus里面,包含默认地prometheus.yml配置文件。

[root@prometheus local]# pwd
/usr/local
[root@prometheus local]# ls
bin etc games include lib lib64 libexec prometheus prometheus-2.23.0.linux-amd64.tar.gz sbin share src
[root@prometheus local]# ls prometheus
console_libraries consoles LICENSE NOTICE prometheus prometheus.yml promtool
[root@prometheus local]#

1.4配置prometheus

查看prometheus.yml配置文件内容:

[root@prometheus local]# pwd
/usr/local
[root@prometheus local]# cat /usr/local/prometheus/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']
[root@prometheus local]#

1.4.1 创建prometheus的用户

为了安全,尽量使用普通用户来启动prometheus服务。

[root@prometheus local]# useradd -s /sbin/nologin -M prometheus

1.4.2 更改数据存储目录

prometheus的数据默认会存放在应用所在目录下,这里我们修改为/data/prometheus:

[root@prometheus local]# mkdir /data/prometheus -p
[root@prometheus local]# chown -R prometheus:prometheus /usr/local/prometheus
[root@prometheus local]# chown -R prometheus:prometheus /data/prometheus/

1.5 创建systemd启动脚本

prometheus的启动很简单,只需要直接启动解压目录的二进制文件prometheus,然后再加上一些参数即可。

[root@prometheus local]# vim /usr/lib/systemd/system/prometheus.service
[Unit]
Description=Prometheus
Documentation=https://prometheus.io/
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/prometheus/prometheus --config.file=/usr/local/prometheus/prometheus.yml --storage.tsdb.path=/data/prometheus
ExecStop=/bin/kill -s QUIT $MAINPID
Restart=on-failure
User=prometheus

[Install]
WantedBy=multi-user.target

#不要忘记执行
[root@prometheus local]# systemctl daemon-reload

1.6 启动prometheus并设置为开机自启动

#启动prometheus并设置为开机自启动
[root@prometheus local]# systemctl enable --now prometheus
Created symlink from /etc/systemd/system/multi-user.target.wants/prometheus.service to /usr/lib/systemd/system/prometheus.service.

#查看prometheus服务状态
[root@prometheus local]# systemctl status prometheus
● prometheus.service - Prometheus
Loaded: loaded (/usr/lib/systemd/system/prometheus.service; enabled; vendor preset: disabled)
Active: active (running) since Fri 2021-01-29 07:17:49 CST; 12s ago
Docs: https://prometheus.io/
Main PID: 1916 (prometheus)
CGroup: /system.slice/prometheus.service
└─1916 /usr/local/prometheus/prometheus --config.file=/usr/local/prometheus/prometheus.yml --storage.tsdb.path=/data/prometheus

Jan 29 07:17:49 prometheus prometheus[1916]: level=info ts=2021-01-28T23:17:49.337Z caller=head.go:645 component=tsdb msg="Replaying on-disk memo...s if any"
Jan 29 07:17:49 prometheus prometheus[1916]: level=info ts=2021-01-28T23:17:49.337Z caller=head.go:659 component=tsdb msg="On-disk memory mappabl…on=12.223µs
Jan 29 07:17:49 prometheus prometheus[1916]: level=info ts=2021-01-28T23:17:49.337Z caller=head.go:665 component=tsdb msg="Replaying WAL, this ma... a while"
Jan 29 07:17:49 prometheus prometheus[1916]: level=info ts=2021-01-28T23:17:49.338Z caller=head.go:717 component=tsdb msg="WAL segment loaded" se...Segment=0
Jan 29 07:17:49 prometheus prometheus[1916]: level=info ts=2021-01-28T23:17:49.338Z caller=head.go:722 component=tsdb msg="WAL replay completed" …ion=431.8µs
Jan 29 07:17:49 prometheus prometheus[1916]: level=info ts=2021-01-28T23:17:49.340Z caller=main.go:742 fs_type=XFS_SUPER_MAGIC
Jan 29 07:17:49 prometheus prometheus[1916]: level=info ts=2021-01-28T23:17:49.340Z caller=main.go:745 msg="TSDB started"
Jan 29 07:17:49 prometheus prometheus[1916]: level=info ts=2021-01-28T23:17:49.340Z caller=main.go:871 msg="Loading configuration file" filename=...theus.yml
Jan 29 07:17:49 prometheus prometheus[1916]: level=info ts=2021-01-28T23:17:49.354Z caller=main.go:902 msg="Completed loading of configuration file" filen…µs
Jan 29 07:17:49 prometheus prometheus[1916]: level=info ts=2021-01-28T23:17:49.355Z caller=main.go:694 msg="Server is ready to receive web requests."
Hint: Some lines were ellipsized, use -l to show in full.

#查看prometheus服务所使用的的端口号
[root@prometheus local]# ss -tnlp
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 100 127.0.0.1:25 *:* users:(("master",pid=1226,fd=13))
LISTEN 0 128 *:22 *:* users:(("sshd",pid=1014,fd=3))
LISTEN 0 100 [::1]:25 [::]:* users:(("master",pid=1226,fd=14))
LISTEN 0 128 [::]:9090 [::]:* users:(("prometheus",pid=1916,fd=9))
LISTEN 0 128 [::]:22 [::]:* users:(("sshd",pid=1014,fd=4))
[root@prometheus local]#

1.7 访问prometheus

我们看到有9090端口,然后直接以IP:Port的方式来访问:(在自己笔记本上进行测试) http://192.168.10.10:9090 image-20210131210234940

还可以查看到当前正在被监控的主机,这里只有我们当前部署的这台。如下所示:

点击Status--->Targets可以看到 image-20210131210249261

从UP状态可以看的出来节点是正常的。

2、安装node exporter

node exporter的作用:收集操作系统的基本系统, 例如cpu, 内存, 硬盘空间等基本信息, 并对外提供api接口,用于prometheus查询存储。

**备注:**以下配置在node1和node2都要执行。(我们这边先在node1上执行,后在node2执行一样的操作)

2.1 下载安装包

node exporter最新的版本是1.0.1。下载链接:https://github.com/prometheus/node_exporter/releases/download/v1.0.1/node_exporter-1.0.1.linux-amd64.tar.gz

2.2 解压(node节点操作)

首先,将刚下载好的node_exporter-1.0.1.linux-amd64.tar软件包上传到node1和node2机器上,再执行如下命令:

[root@node1 ~]# mv node_exporter-1.0.1.linux-amd64.tar.gz  /usr/local
[root@node1 ~]# cd /usr/local
[root@node1 local]# tar xf node_exporter-1.0.1.linux-amd64.tar.gz
[root@node1 local]# mv node_exporter-1.0.1.linux-amd64 node_exporter

#查看node_exporter相关文件
[root@node1 local]# pwd
/usr/local
[root@node1 local]# ls
bin etc games include lib lib64 libexec node_exporter node_exporter-1.0.1.linux-amd64.tar.gz sbin share src
[root@node1 local]# cd node_exporter
[root@node1 node_exporter]# ll -h
total 19M
-rw-r--r--. 1 3434 3434 12K Jun 16 2020 LICENSE
-rwxr-xr-x. 1 3434 3434 19M Jun 16 2020 node_exporter
-rw-r--r--. 1 3434 3434 463 Jun 16 2020 NOTICE

2.3 启动node exporter(node节点操作)

node exporter无需修改配置文件,安装上去之后可以直接启动。 node exporter的二进制启动文件在/usr/local/node_exporter目录下面。这里我们直接以nohup的方式来启动这个服务

[root@node1 local]# nohup /usr/local/node_exporter/node_exporter > /dev/null 2>&1 &
[1] 2547
[root@node1 local]# ps -ef|grep 2547
root 2547 1876 0 07:36 pts/0 00:00:00 /usr/local/node_exporter/node_exporter
root 2552 1876 0 07:37 pts/0 00:00:00 grep --color=auto 2547
[root@node1 local]# ss -tnlp
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 100 127.0.0.1:25 *:* users:(("master",pid=1220,fd=13))
LISTEN 0 128 *:22 *:* users:(("sshd",pid=1007,fd=3))
LISTEN 0 100 [::1]:25 [::]:* users:(("master",pid=1220,fd=14))
LISTEN 0 128 [::]:9100 [::]:* users:(("node_exporter",pid=2547,fd=3))
LISTEN 0 128 [::]:22 [::]:* users:(("sshd",pid=1007,fd=4))
[root@node1 local]#
node exporter默认地端口是9100,只要能看到端口,说明服务启动是没有问题的。

接下来按照相同的方法把第二个节点完成配置:

[root@node2 local]# ss -tnlp
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 100 127.0.0.1:25 *:* users:(("master",pid=1223,fd=13))
LISTEN 0 128 *:22 *:* users:(("sshd",pid=1005,fd=3))
LISTEN 0 100 [::1]:25 [::]:* users:(("master",pid=1223,fd=14))
LISTEN 0 128 [::]:9100 [::]:* users:(("node_exporter",pid=2534,fd=3))
LISTEN 0 128 [::]:22 [::]:* users:(("sshd",pid=1005,fd=4))
[root@node2 local]#

2.4 加入开机启动(node节点操作)

node exporter直接写在Linux系统启动脚本/etc/rc.local文件里面即可。当然,最后赋予x执行权限

[root@node1 local]# vim /etc/rc.local
#!/bin/bash

touch /var/lock/subsys/local #默认就存在的
nohup /usr/local/node_exporter/node_exporter > /dev/null 2>&1 &
[root@node1 local]# chmod +x /etc/rc.local

接下来按照相同的方法把第二个节点完成配置:

[root@node2 local]# vim /etc/rc.local
#!/bin/bash

touch /var/lock/subsys/local #默认就存在的
nohup /usr/local/node_exporter/node_exporter > /dev/null 2>&1 &
[root@node2 local]# chmod +x /etc/rc.local

2.5 配置prometheus抓取数据(prometheus节点操作)

node exporter启动后暴露出来9100端口,是为了让prometheus server去抓取这个主机上面的日志。所以我们需要在prometheus中配置一下这个接口。 编辑prometheus.yml文件,增加后面的3行数据。

[root@prometheus local]# vim /usr/local/prometheus/prometheus.yml #注意,这边配置时要留意yaml格式问题
- job_name: 'node1'
static_configs:
- targets: ['192.168.10.11:9100']
- job_name: 'node2'
static_configs:
- targets: ['192.168.10.12:9100']

然后重启prometheus,再次打开prometheus的web页面,即可看到现在所监控的主机:

systemctl restart prometheus

image-20210131210318010

备注: 2行注释加一行指标的值: image-20210131210332588 image-20210131210345550

3、安装Grafana

grafana和prometheus我们都安装在一台机器上面。

3.1 下载安装包

grafana的官网:https://grafana.com/

image-20210131211117070

最新版本grafana-7.2.1,下载链接https://dl.grafana.com/oss/release/grafana-7.2.1.linux-amd64.tar.gz

3.2 解压

首先,将刚下载好的ngrafana-7.2.1.linux-amd64.tar软件包上传到prometheus机器上,再执行如下命令:

这里我们依然安装到/usr/local目录下:

[root@prometheus ~]# ls
grafana-7.2.1.linux-amd64.tar.gz
[root@prometheus ~]# mv grafana-7.2.1.linux-amd64.tar.gz /usr/local
[root@prometheus ~]# cd /usr/local
[root@prometheus local]# tar xf grafana-7.2.1.linux-amd64.tar.gz
[root@prometheus local]# mv grafana-7.2.1 grafana

3.3 配置grafana

3.3.1 创建grafana用户

[root@prometheus local]# useradd -s /sbin/nologin -M grafana

3.3.2 创建数据存放目录

[root@prometheus local]# mkdir /data/grafana
[root@prometheus local]# chown -R grafana:grafana /usr/local/grafana
[root@prometheus local]# chown -R grafana:grafana /data/grafana/

3.4 修改配置文件

grafana的配置文件为/usr/local/grafana/conf/defaults.ini文件,配置为上面新建的数据目录。

配置文件里面参数比较多,我们大概修改下面4个参数即可,后期需要了再另改其他参数。

[root@prometheus local]# vim /usr/local/grafana/conf/defaults.ini #修改如下内容后,保存退出
data = /data/grafana/data
logs = /data/grafana/log
plugins = /data/grafana/plugins
provisioning = /data/grafana/conf/provisioning

3.5 创建systemd启动脚本

grafana启动的时候指定一下启动的安装家目录。
[root@prometheus ~]# vim /usr/lib/systemd/system/grafana-server.service
[Unit]
Description=Grafana
After=network.target

[Service]
User=grafana
Group=grafana
Type=notify
ExecStart=/usr/local/grafana/bin/grafana-server -homepath /usr/local/grafana
ExecStop=/bin/kill -s QUIT $MAINPID
Restart=on-failure

[Install]
WantedBy=multi-user.target

记得daemon-reload一下
[root@prometheus ~]# systemctl daemon-reload

3.6 启动grafana并设置为开机自启动

[root@prometheus local]# systemctl enable --now grafana-server
Created symlink from /etc/systemd/system/multi-user.target.wants/grafana-server.service to /usr/lib/systemd/system/grafana-server.service.
[root@prometheus local]#

3.7 访问grafana

grafana的默认端口是3000,访问的地址是IP:3000;

可以通过ss -tnlp命令查看服务是否有正常启动;

[root@prometheus local]# ss -tnlp
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 100 127.0.0.1:25 *:* users:(("master",pid=1170,fd=13))
LISTEN 0 128 *:22 *:* users:(("sshd",pid=962,fd=3))
LISTEN 0 128 [::]:3000 [::]:* users:(("grafana-server",pid=1558,fd=8))
LISTEN 0 100 [::1]:25 [::]:* users:(("master",pid=1170,fd=14))
LISTEN 0 128 [::]:9090 [::]:* users:(("prometheus",pid=965,fd=14))
LISTEN 0 128 [::]:22 [::]:* users:(("sshd",pid=962,fd=4))
[root@prometheus local]#

我这里访问ip为:http://192.168.10.10:3000 默认地账号密码是admin/admin,登录之后会强制修改密码;

image-20210131212245086

image-20210131212314384

4、grafana连接prometheus

接下来我们把grafana和prometheus关联起来,也就是在grafana中添加数据源。

4.1 添加数据源

在数据源这里选择第一个prometheus,点击save &test就可以了。

image-20210131212549250

image-20210131212706816

4.2 导入自带的图表

按照上面的指导添加数据源之后,我们就可以针对这些数据来绘制图表了。

grafana最人性化的一点就是拥有大量的图表模板,我们只需要导入模板即可,从而省去了大量的制作图表的时间。

目前我们的prometheus还没有什么监控数据,只有prometheus本身的数据,我们看下这些prometheus本身数据图表是怎样的。

在添加数据源的位置上,右边的选项有个Dashboards的菜单选项,我们点击进去,然后导入prometheus2.0.

image-20210131213243505

image-20210131213256377

模板文件:主机基础监控(cpu,内存,磁盘,网络).json,将其导入即可;

image-20210131213307628

接下来就可以去查看这个图表了。

image-20210131213321061

image-20210131213330097

image-20210131213408098

至此,实验搭建结束。

本教程Prometheus搭建过程遇到的问题

grafana连接prometheus导入数据源时报错:

#原来都是按实验文档这样做得,没报错,这次竟然报错了,好奇怪??;(2020.1.31)先搁置。。。

image-20210131213735608

image-20210131213539646

关于我

我的博客主旨:

  • 排版美观,语言精炼;
  • 文档即手册,步骤明细,拒绝埋坑,提供源码;
  • 本人实战文档都是亲测成功的,各位小伙伴在实际操作过程中如有什么疑问,可随时联系本人帮您解决问题,让我们一起进步!

🍀 微信二维码

x2675263825 (舍得), qq:2675263825。

image-20230107215114763

🍀 微信公众号

《云原生架构师实战》

image-20230107215126971

🍀 个人博客站点

https://onedayxyy.cn/

🍀 语雀

https://www.yuque.com/xyy-onlyone

🍀 csdn

https://blog.csdn.net/weixin_39246554?spm=1010.2135.3001.5421

image-20230107215149885

🍀 知乎

https://www.zhihu.com/people/foryouone

image-20230107215203185

最后

好了,关于本次就到这里了,感谢大家阅读,最后祝大家生活快乐,每天都过的有意义哦,我们下期见!