环境准备
下载软件包
wget https://mirrors.tuna.tsinghua.edu.cn/grafana/yum/rpm/Packages/grafana-9.1.0-1.x86_64.rpm
wget https://ftp.postgresql.org/pub/source/v10.5/postgresql-10.5.tar.gz
部署Grafana
安装Grafana软件包
yum -y install grafana-9.1.0-1.x86_64.rpm
Grafana配置文件设置
vi /usr/share/grafana/conf/defaults.ini
http_port = 3000 #Grafana访问端口
启动Grafana服务并设置为开机自启
systemctl enable grafana-server.service --now
设置Grafana初始化登录设置
浏览器访问Grafana,端口为自己修改的配置文件的端口,本文未作修改默认端口3000,初始账号和密码均为admin :
重设密码,这里设置的为admin123,设置完成后点击Submit提交:
到这里Grafana环境和初始化设置完成。
安装postgres数据库
创建postgres用户、组并对其用户授权密码
useradd postgres
groupadd postgres
passwd postgres
解压postgresql软件包
tar -xf postgresql-10.5.tar.gz -C /usr/local/
安装postgresl所需依赖包
yum -y install -y readline-devel systemtap-sdt-devel.x86_64 zlib zlib-devel openssl-devel pam-devel libxml2 libxml2-devel libxslt libxslt-devel libxslt libxslt-devel gcc make
预编译
cd /usr/local/postgresql-10.5
./configure --prefix=/usr/local/postgresql
编译安装
make && make install
授权预编译指定安装postgresql目录为postgres用户、组访问权限
chown -R postgres:postgres /usr/local/postgresql
初始化postgres数据库
su postgres
/usr/local/postgresql/bin/initdb -D /usr/local/postgresql/data
修改postgresql配置文件
vi /usr/local/postgresql/data/postgresql.conf
vi /usr/local/postgresql/data/pg_hba.conf #在末尾添加如下一行
启动postgresql数据库
/usr/local/postgresql/bin/pg_ctl -D /usr/local/postgresql/data -l logfile start
查看是否启动并登录验证
ss -tuanpl | grep 5432
/usr/local/postgresql/bin/psql -U postgres -d postgres
准备数据源(这里以CPU、磁盘、内存三个作为演示)
创建库
create database control
切换库
\c control
创建表
create table cpu_load(ip varchar(15),load_1m numeric(5,2),load_5m numeric(5,2),load_15m numeric(5,2),create_time timestamp default current_timestamp);
create table free_info(ip varchar(15),free_size varchar(4),free_use numeric(8,2),free_avail numeric(8,2),create_time timestamp default current_timestamp);
create table disk_info(ip varchar(15),disk_size varchar(8),disk_avail varchar(8),disk_percentage numeric(4,2),create_time timestamp default current_timestamp);
将数据插入数据库
这里将采用脚本获取数据,其他数据类型仅供参考:
vi /root/heack.sh
#!/bin/bash
ip_address=$(ip address show | awk 'NR==9' | awk '{print $2}' | awk -F/ '{print $1}')
uptime_info(){
uptime_1m=$(uptime | awk -Fload\ average\: '{print $2}' | awk -F, '{print $1}')
uptime_5m=$(uptime | awk -Fload\ average\: '{print $2}' | awk -F, '{print $2}')
uptime_15m=$(uptime | awk -Fload\ average\: '{print $2}' | awk -F, '{print $3}')
/usr/local/postgresql/bin/psql -U postgres -p 5432 -d control -c "insert into cpu_load values('$ip_address','$uptime_1m','$uptime_5m','$uptime_15m');" > /dev/null
}
free_info(){
free_sized=$(free -h --si | awk '{print $2}' | awk 'NR==2')
fr_U=$(free -h --si | grep "Mem" | awk '{print $3}' | grep -o '[a-Z]')
fr_A=$(free -h --si | grep "Mem" | awk '{print $7}' | grep -o '[a-Z]')
if [[ $fr_U == 'M' && $fr_A == 'M' ]];then
free_use=$(free -h --si | awk '{print $3}' | awk 'NR==2' | awk -FM '{print $1}')
free_available=$(free -h --si | awk '{print $7}' | awk 'NR==2' | awk -FM '{print $1}')
free_us=$(awk 'BEGIN{printf "%.3f\n",'$free_use/1024'}')
free_avail=$(awk 'BEGIN{printf "%.3f\n",'$free_available/1024'}')
/usr/local/postgresql/bin/psql -U postgres -p 5432 -d control -c "insert into free_info values('$ip_address','$free_sized','$free_us','$free_avail');" > /dev/null
elif [[ $fr_U == 'G' && $fr_A == 'M' ]];then
free_use=$(free -h --si | awk '{print $3}' | awk 'NR==2' | awk -FG '{print $1}')
free_available=$(free -h --si | awk '{print $7}' | awk 'NR==2' | awk -FM '{print $1}')
free_avail=$(awk 'BEGIN{printf "%.3f\n",'$free_available/1024'}')
/usr/local/postgresql/bin/psql -U postgres -p 5432 -d control -c "insert into free_info values('$ip_address','$free_sized','$free_use','$free_avail');" > /dev/null
elif [[ $fr_U == 'M' && $fr_A == 'G' ]];then
free_use=$(free -h --si | awk '{print $3}' | awk 'NR==2' | awk -FM '{print $1}')
free_us=$(awk 'BEGIN{printf "%.3f\n",'$free_use/1024'}')
free_available=$(free -h --si | awk '{print $7}' | awk 'NR==2' | awk -FG '{print $1}')
/usr/local/postgresql/bin/psql -U postgres -p 5432 -d control -c "insert into free_info values('$ip_address','$free_sized','$free_us','$free_available');" > /dev/null
elif [[ $fr_U == 'G' && $fr_A == 'G' ]];then
free_use=$(free -h --si | awk '{print $3}' | awk 'NR==2' | awk -FG '{print $1}')
free_available=$(free -h --si | awk '{print $7}' | awk 'NR==2' | awk -FG '{print $1}')
/usr/local/postgresql/bin/psql -U postgres -p 5432 -d control -c "insert into free_info values('$ip_address','$free_sized','$free_use','$free_available');" > /dev/null
fi
}
disk_info(){
disk_size_T=$(df -h | grep '/dev/mapper/centos-root' | awk '{print $2}' | grep -o 'T')
disk_size_G=$(df -h | grep '/dev/mapper/centos-root' | awk '{print $2}' | grep -o 'G')
disk_size_M=$(df -h | grep '/dev/mapper/centos-root' | awk '{print $2}' | grep -o 'M')
disk_avail_T=$(df -h | grep '/dev/mapper/centos-root' | awk '{print $4}' | grep -o 'T')
disk_avail_G=$(df -h | grep '/dev/mapper/centos-root' | awk '{print $4}' | grep -o 'G')
disk_avail_M=$(df -h | grep '/dev/mapper/centos-root' | awk '{print $4}' | grep -o 'M')
if [[ $disk_size_T == T && $disk_avail_T == T ]];then
disk_sized=$(df -h | grep /dev/mapper/centos-root | awk '{print $2}' | awk -FT '{print $1}')
disk_sizeing=$(awk 'BEGIN{printf "%.3f\n",'$disk_sized*1024'}')
disk_availabled=$(df -h | grep /dev/mapper/centos-root | awk '{print $4}' | awk -FT '{print $1}')
disk_availing=$(awk 'BEGIN{printf "%.3f\n",'$disk_availabled*1024'}')
disk_usaged=$(df -h | grep /dev/mapper/centos-root | awk '{print $5}' | awk -F% '{print $1}')
/usr/local/postgresql/bin/psql -U postgres -p 5432 -d control -c "insert into disk_info values('$ip_address','$disk_sizeing','$disk_availing','$disk_usaged');" > /dev/null
elif [[ $disk_size_T == T && $disk_avail_G == G ]];then
disk_sized=$(df -h | grep /dev/mapper/centos-root | awk '{print $2}' | awk -FT '{print $1}')
disk_sizeing=$(awk 'BEGIN{printf "%.3f\n",'$disk_sized*1024'}')
disk_availabled=$(df -h | grep /dev/mapper/centos-root | awk '{print $4}' | awk -FG '{print $1}')
disk_usaged=$(df -h | grep /dev/mapper/centos-root | awk '{print $5}' | awk -F% '{print $1}')
/usr/local/postgresql/bin/psql -U postgres -p 5432 -d control -c "insert into disk_info values('$ip_address','$disk_sizeing','$disk_availabled','$disk_usaged');" > /dev/null
elif [[ $disk_size_T == T && $disk_avail_M == M ]];then
disk_sized=$(df -h | grep /dev/mapper/centos-root | awk '{print $2}' | awk -FT '{print $1}')
disk_sizeing=$(awk 'BEGIN{printf "%.3f\n",'$disk_sized*1024'}')
disk_availabled=$(df -h | grep /dev/mapper/centos-root | awk '{print $4}' | awk -FM '{print $1}')
disk_availing=$(awk 'BEGIN{printf "%.3f\n",'$disk_availabled/1024'}')
disk_usaged=$(df -h | grep /dev/mapper/centos-root | awk '{print $5}' | awk -F% '{print $1}')
/usr/local/postgresql/bin/psql -U postgres -p 5432 -d control -c "insert into disk_info values('$ip_address','$disk_sizeing','$disk_availing','$disk_usaged');" > /dev/null
elif [[ $disk_size_G == G && $disk_avail_G == G ]];then
disk_sized=$(df -h | grep /dev/mapper/centos-root | awk '{print $2}' | awk -FG '{print $1}')
disk_availabled=$(df -h | grep /dev/mapper/centos-root | awk '{print $4}' | awk -FG '{print $1}')
disk_usaged=$(df -h | grep /dev/mapper/centos-root | awk '{print $5}' | awk -F% '{print $1}')
/usr/local/postgresql/bin/psql -U postgres -p 5432 -d control -c "insert into disk_info values('$ip_address','$disk_sized','$disk_availabled','$disk_usaged');" > /dev/null
elif [[ $disk_size_G == G && $disk_avail_M == M ]];then
disk_sized=$(df -h | grep /dev/mapper/centos-root | awk '{print $2}' | awk -FG '{print $1}')
disk_availabled=$(df -h | grep /dev/mapper/centos-root | awk '{print $4}' | awk -FG '{print $1}')
disk_avail=$(awk 'BEGIN{printf "%.3f\n",'$disk_availabled/1024'}')
disk_usaged=$(df -h | grep /dev/mapper/centos-root | awk '{print $5}' | awk -F% '{print $1}')
/usr/local/postgresql/bin/psql -U postgres -p 5432 -d control -c "insert into disk_info values('$ip_address','$disk_sized','$disk_avail','$disk_usaged');" > /dev/null
elif [[ $disk_size_M == M && $disk_avail_M == M ]];then
disk_sized=$(df -h | grep /dev/mapper/centos-root | awk '{print $2}' | awk -FG '{print $1}')
disk_sizeing=$(awk 'BEGIN{printf "%.3f\n",'$disk_sized/1024'}')
disk_availabled=$(df -h | grep /dev/mapper/centos-root | awk '{print $4}' | awk -FG '{print $1}')
disk_avail=$(awk 'BEGIN{printf "%.3f\n",'$disk_availabled/1024'}')
disk_usaged=$(df -h | grep /dev/mapper/centos-root | awk '{print $5}' | awk -F% '{print $1}')
/usr/local/postgresql/bin/psql -U postgres -p 5432 -d control -c "insert into disk_info values('$ip_address','$disk_sizeing','$disk_avail','$disk_usaged');" > /dev/null
fi
}
uptime_info
free_info
disk_info
执行脚本,多获取一些数据
这里采用计划任务中执行
crontal -e
*/1 * * * * /root/heack.sh
登录Grafana设置连接数据库
点击下图位置选择连接数据源类型
如果你的数据源是MYSQL这里就选择MYSQL,如果数据源为PostgreSQL就先则PostgreSQL
填写连接数据库信息
点击保存并测试
提示如下Database Connection OK 表示数据库连接成功
创建Doshboard
点击create doshboard
点击设置
点击Variables,添加环境变量
如下设置varibles创建写法
Name为显示在varilbes中的变量名;Type为数据获取类型;Hide选择lable为显示在doshboard中的菜单索引和当作调用变量使用,选择varibles只当作变量在doshboard中进行调用;Data source 选择数据源,这里选择上面创建的数据源;Query为写sql脚本匹配数据。设置完成后点击update。
可以看到在Varibes界面看到Name的名称
点击返回Doshboard主界面可以看到上方显示的lable标签名称以及匹配到的数据源
添加图表
点击上方图表标识进行创建
匹配数CPU监控据导出图形模型
选择sql编辑模式,图形选择Time series折线图
编写sql进行匹配
对图形进行美化设置
这是磁盘和内存显示图形
可对比上面cpu绘图方式进行调试,磁盘显示、内存使用可使用仪表板自己进行研究