部署环境
hostname | ip | 安装 | OS |
---|---|---|---|
zabbix | 10.130.16.10 | zabbix grafana | centos7.9 |
mariadb | 10.130.16.11 | mariadb | centos7.9 |
mariadb部署
#临时关闭selinux
setenforce 0
#永久关闭selinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
#关闭防火墙
systemctl stop firewalld
#防火墙开机不启动
systemctl disable firewalld
#安装mariadb-server
yum install -y mariadb-server
#mariadb启动
systemctl start mariadb
#mariadb自启
systemctl enable mariadb
mysql_secure_installation #初始化mysql
mysql
mysql> create database zabbix character set utf8 collate utf8_bin;
mysql> create user zabbix@localhost identified by 'zabbix'; #按需设置
mysql> grant all privileges on zabbix.* to zabbix@'10.130.16.%' identified by 'zabbix'; #按需设置
mysql> grant all privileges on zabbix.* to zabbix@'127.0.0.1' identified by 'zabbix'; #按需设置
mysql> quit;
#zabbix-agent安装
rpm -Uvh https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm #使用阿里云的
yum clean all
yum install -y zabbix-agent
vi /etc/zabbix/zabbix_agentd.conf
Server=10.130.16.10 #修改为zabbix-server的ip
ServerActive=10.130.16.10 #修改为zabbix-server的ip
Hostname=mysql #ip,主机名都可以
RefreshActiveChecks=120 #被监控的主机多久(秒)重新请求代理或服务端刷新一监控列表。范围为60-3600秒。
BufferSize=500 #此参数作用设置保存采集数据在内存中的容量大小。
#启动zabbix-agent
systemctl enable zabbix-agent
#自启zabbix-agent
systemctl start zabbix-agent
#iptables配置
yum install iptables-services -y
iptables -F
iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -j ACCEPT
iptables -A INPUT -p icmp -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
iptables -A INPUT -p tcp --dport 10050 -j ACCEPT
#保存
iptables-save > /etc/sysconfig/iptables
#运行
systemctl start iptables
#自启
systemctl enable iptables
zabbix部署
#临时关闭selinux
setenforce 0
#永久关闭selinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
#关闭防火墙
systemctl stop firewalld
#防火墙开机不启动
systemctl disable firewalld
yum -y install mariadb #安装mariadb
mysql -h 10.130.16.11 -uzabbix -pzabbix #测试连通性
rpm -Uvh https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm #使用阿里云的
yum clean all
yum install zabbix-server-mysql zabbix-agent -y
yum install centos-release-scl -y
vi /etc/yum.repos.d/zabbix.repo
[zabbix-frontend]
name=Zabbix Official Repository frontend - $basearch
baseurl=http://repo.zabbix.com/zabbix/5.0/rhel/7/$basearch/frontend
enabled=1 #enable
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX-A14FE591
yum install zabbix-web-mysql-scl zabbix-apache-conf-scl -y
zcat /usr/share/doc/zabbix-server-mysql-5.0.6/create.sql.gz | mysql -h 10.130.16.11 -uzabbix -p zabbix
mysql -h 10.130.16.11 -uzabbix zabbix -p
show tables; #查看是否创建好相应表
quit;
配置文件说明:
转载https://www.cnblogs.com/lemanlai/p/12512033.html
配置信息根据设备性能来定
vi /etc/zabbix/zabbix_server.conf
DBHost=10.130.16.11 #修改DBHsot
DBPassword=zabbix #修改DBPassword
StartPollers=30 #按实际需求修改
StartPollersUnreachable=5
StartTrappers=10
StartPingers=20
StartDiscoverers=10
Cachesize=1024M
StartDBSyncers=10
HistoryCacheSize=256M
TrendCacheSize=256M
HIstoryTextCacheSize=256M
Timeout=5
vi /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf
php_value[date.timezone] = Asia/Shanghai #修改时区
#配置文件模板,按需修改
LogFile=/var/log/zabbix/zabbix_server.log
LogFileSize=0
PidFile=/var/run/zabbix/zabbix_server.pid
SocketDir=/var/run/zabbix
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix
StartPollers=160
StartPreprocessors=5
StartPollersUnreachable=80
StartTrappers=100
StartPingers=50
StartDiscoverers=50
StartVMwareCollectors=10
VMwareCacheSize=256M
SNMPTrapperFile=/var/log/snmptrap/snmptrap.log
HousekeepingFrequency=1
MaxHousekeeperDelete=50000
CacheSize=4G
HistoryCacheSize=2G
HistoryIndexCacheSize=1G
TrendCacheSize=2G
ValueCacheSize=4G
Timeout=4
AlertScriptsPath=/usr/lib/zabbix/alertscripts
ExternalScripts=/usr/lib/zabbix/externalscripts
LogSlowQueries=3000
systemctl restart zabbix-server zabbix-agent httpd rh-php72-php-fpm
systemctl enable zabbix-server zabbix-agent httpd rh-php72-php-fpm
http://10.130.16.10/zabbix
默认账户:Admin
密码:zabbix
yum install -y lrzsz #使用 SecureCRT
cd /usr/share/zabbix/assets/fonts/
rz #上传simkai.ttf(C:\Windows\Fonts)
vi /usr/share/zabbix/include/defines.inc.php
define('ZBX_GRAPH_FONT_NAME', 'simkai'); // font file name
define('ZBX_FONT_NAME', 'simkai');
systemctl restart zabbix-server
mysql优化
vi /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
max_connections = 600
max_allowed_packet = 32M
max_heap_table_size =128M
read_rnd_buffer_size = 512K
sort_buffer_size = 1M
join_buffer_size = 1M
query_cache_size = 2048M
query_cache_limit = 32M
innodb_open_files = 2048
innodb_buffer_pool_size = 4G
innodb_thread_concurrency = 32
thread_cache_size = 10
table-cache = 5000
back_log = 300
转载https://github.com/zabbix-book/partitiontables_zabbix
下载partitiontables_zabbix.sh到/usr/sbin/下
修改partitiontables_zabbix.sh
#!/bin/bash
# author: itnihao
# mail: itnihao#qq.com
# Apache License Version 2.0
# date: 2018-06-06
# funtion: create parition for zabbix MySQL
# repo: https://github.com/zabbix-book/partitiontables_zabbix
#配置环境变量
ZABBIX_USER="zabbix"
ZABBIX_PWD="zabbix"
ZABBIX_DB="zabbix"
ZABBIX_PORT="3306"
ZABBIX_HOST="127.0.0.1"
MYSQL_BIN="mysql"
#历史数据保留时间,单位天
HISTORY_DAYS=30
#趋势数据保留时间,单位月
TREND_MONTHS=12
HISTORY_TABLE="history history_log history_str history_text history_uint"
TREND_TABLE="trends trends_uint"
#MYSQL连接命令
MYSQL_CMD=$(echo ${MYSQL_BIN} -u${ZABBIX_USER} -p${ZABBIX_PWD} -P${ZABBIX_PORT} -h${ZABBIX_HOST} ${ZABBIX_DB})
function create_partitions_history() {
#给历史表创建分区
for PARTITIONS_CREATE_EVERY_DAY in $(date +"%Y%m%d") $(date +"%Y%m%d" --date='1 days') $(date +"%Y%m%d" --date='2 days') $(date +"%Y%m%d" --date='3 days') $(date +"%Y%m%d" --date='4 days') $(date +"%Y%m%d" --date='5 days') $(date +"%Y%m%d" --date='6 days') $(date +"%Y%m%d" --date='7 days')
do
TIME_PARTITIONS=$(date -d "$(echo ${PARTITIONS_CREATE_EVERY_DAY} 23:59:59)" +%s)
for TABLE_NAME in ${HISTORY_TABLE}
do
SQL1=$(echo "show create table ${TABLE_NAME};")
RET1=$(${MYSQL_CMD} -e "${SQL1}"|grep "PARTITION BY RANGE"|wc -l)
#表结构中的表分区不存在,则创建
if [ "${RET1}" == "0" ];then
SQL2=$(echo "ALTER TABLE $TABLE_NAME PARTITION BY RANGE( clock ) (PARTITION p${PARTITIONS_CREATE_EVERY_DAY} VALUES LESS THAN (${TIME_PARTITIONS}));")
RET2=$(${MYSQL_CMD} -e "${SQL2}")
if [ "${RET2}" != "" ];then
echo ${RET2}
echo "${SQL2}"
else
printf "table %-12s create partitions p${PARTITIONS_CREATE_EVERY_DAY}\n" ${TABLE_NAME}
fi
continue
fi
#表结构中的表分区已经存在,则创建分区
if [ "${RET1}" != "0" ];then
SQL3=$(echo "show create table ${TABLE_NAME};")
RET3=$(${MYSQL_CMD} -e "${SQL3}"|grep "p${PARTITIONS_CREATE_EVERY_DAY}"|wc -l)
if [ "${RET3}" == "0" ];then
TIME_PARTITIONS=$(date -d "$(echo ${PARTITIONS_CREATE_EVERY_DAY} 23:59:59)" +%s)
SQL4=$(echo "ALTER TABLE $TABLE_NAME ADD PARTITION (PARTITION p${PARTITIONS_CREATE_EVERY_DAY} VALUES LESS THAN (${TIME_PARTITIONS}));")
RET4=$(${MYSQL_CMD} -e "${SQL4}")
if [ "${RET4}" != "" ];then
echo ${RET4}
echo "${SQL4}"
else
printf "table %-12s create partitions p${PARTITIONS_CREATE_EVERY_DAY}\n" ${TABLE_NAME}
fi
fi
fi
done
done
}
function drop_partitions_history() {
#删除历史表分区
for PARTITIONS_DELETE_DAYS_AGO in $(date +"%Y%m%d" --date="${HISTORY_DAYS} days ago")
do
for TABLE_NAME in ${HISTORY_TABLE}
do
SQL=$(echo -e "show create table ${TABLE_NAME};")
RET=$(${MYSQL_CMD} -e "${SQL}"|grep "p${PARTITIONS_DELETE_DAYS_AGO}"|wc -l)
if [ "${RET}" == "1" ];then
SQL=$(echo "ALTER TABLE ${TABLE_NAME} DROP PARTITION p${PARTITIONS_DELETE_DAYS_AGO};")
RET=$(${MYSQL_CMD} -e "${SQL}")
if [ "${RET}" != "" ];then
echo ${RET}
echo "${SQL}"
else
printf "table %-12s drop partitions p${PARTITIONS_DELETE_DAYS_AGO}\n" ${TABLE_NAME}
fi
fi
done
done
}
function create_partitions_trend() {
#创建趋势表分区
for PARTITIONS_CREATE_EVERY_MONTHS in $(date +"%Y%m") $(date +"%Y%m" --date='1 months') $(date +"%Y%m" --date='2 months') $(date +"%Y%m" --date='3 months') $(date +"%Y%m" --date='4 months') $(date +"%Y%m" --date='5 months')
do
TIME_PARTITIONS=$(date -d "$(echo ${PARTITIONS_CREATE_EVERY_MONTHS}01 00:00:00)" +%s)
for TABLE_NAME in ${TREND_TABLE}
do
SQL1=$(echo "show create table ${TABLE_NAME};")
RET1=$(${MYSQL_CMD} -e "${SQL1}"|grep "PARTITION BY RANGE"|wc -l)
#表结构中的表分区不存在,则创建
if [ "${RET1}" == "0" ];then
SQL2=$(echo "ALTER TABLE $TABLE_NAME PARTITION BY RANGE( clock ) (PARTITION p${PARTITIONS_CREATE_EVERY_MONTHS} VALUES LESS THAN (${TIME_PARTITIONS}));")
RET2=$(${MYSQL_CMD} -e "${SQL2}")
if [ "${RET2}" != "" ];then
echo ${RET2}
echo "${SQL2}"
else
printf "table %-12s create partitions p${PARTITIONS_CREATE_EVERY_MONTHS}\n" ${TABLE_NAME}
fi
continue
fi
#表结构中的表分区已经存在,则创建分区
if [ "${RET1}" != "0" ];then
SQL3=$(echo "show create table ${TABLE_NAME};")
RET3=$(${MYSQL_CMD} -e "${SQL3}"|grep "p${PARTITIONS_CREATE_EVERY_MONTHS}"|wc -l)
if [ "${RET3}" == "0" ];then
SQL4=$(echo "ALTER TABLE ${TABLE_NAME} ADD PARTITION (PARTITION p${PARTITIONS_CREATE_EVERY_MONTHS} VALUES LESS THAN (${TIME_PARTITIONS}));")
RET4=$(${MYSQL_CMD} -e "${SQL4}")
if [ "${RET4}" != "" ];then
echo ${RET4}
echo "${SQL4}"
else
printf "table %-12s create partitions p${PARTITIONS_CREATE_EVERY_MONTHS}\n" ${TABLE_NAME}
fi
fi
fi
done
done
}
function drop_partitions_trend() {
#删除趋势表分区
for PARTITIONS_DELETE_MONTHS_AGO in $(date +"%Y%m" --date="${TREND_MONTHS} months ago")
do
for TABLE_NAME in ${TREND_TABLE}
do
SQL=$(echo "show create table ${TABLE_NAME};")
RET=$(${MYSQL_CMD} -e "${SQL}"|grep "p${PARTITIONS_DELETE_MONTHS_AGO}"|wc -l)
if [ "${RET}" == "1" ];then
SQL=$(echo "ALTER TABLE ${TABLE_NAME} DROP PARTITION p${PARTITIONS_DELETE_MONTHS_AGO};")
RET=$(${MYSQL_CMD} -e "${SQL}")
if [ "${RET}" != "" ];then
echo ${RET}
echo "${SQL}"
else
printf "table %-12s drop partitions p${PARTITIONS_DELETE_MONTHS_AGO}\n" ${TABLE_NAME}
fi
fi
done
done
}
function main() {
create_partitions_history
create_partitions_trend
drop_partitions_history
drop_partitions_trend
}
main
执行
./partitiontables_zabbix.sh
查看脚本是否执行成功
MariaDB [zabbix]> show create table history\G;
*************************** 1. row ***************************
Table: history
Create Table: CREATE TABLE `history` (
`itemid` bigint(20) unsigned NOT NULL,
`clock` int(11) NOT NULL DEFAULT '0',
`value` double NOT NULL DEFAULT '0',
`ns` int(11) NOT NULL DEFAULT '0',
KEY `history_1` (`itemid`,`clock`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin
/*!50100 PARTITION BY RANGE (`clock`)
(PARTITION p202012130000 VALUES LESS THAN (1607875200) ENGINE = InnoDB,
PARTITION p202012140000 VALUES LESS THAN (1607961600) ENGINE = InnoDB,
PARTITION p202012150000 VALUES LESS THAN (1608048000) ENGINE = InnoDB,
PARTITION p202012160000 VALUES LESS THAN (1608134400) ENGINE = InnoDB,
PARTITION p202012170000 VALUES LESS THAN (1608220800) ENGINE = InnoDB,
PARTITION p202012180000 VALUES LESS THAN (1608307200) ENGINE = InnoDB,
PARTITION p202012190000 VALUES LESS THAN (1608393600) ENGINE = InnoDB,
PARTITION p202012200000 VALUES LESS THAN (1608480000) ENGINE = InnoDB,
PARTITION p202012210000 VALUES LESS THAN (1608566400) ENGINE = InnoDB,
PARTITION p202012220000 VALUES LESS THAN (1608652800) ENGINE = InnoDB,
PARTITION p202012230000 VALUES LESS THAN (1608739200) ENGINE = InnoDB,
PARTITION p202012240000 VALUES LESS THAN (1608825600) ENGINE = InnoDB,
PARTITION p202012250000 VALUES LESS THAN (1608912000) ENGINE = InnoDB,
PARTITION p202012260000 VALUES LESS THAN (1608998400) ENGINE = InnoDB) */
1 row in set (0.00 sec)
ERROR: No query specified
MariaDB [zabbix]>
创建定时任务
shell# crontab -e
1 0 * * * /usr/sbin/partitiontables_zabbix.sh
Shell# chmod 700 /usr/sbin/partitiontables_zabbix.sh
grafana部署
wget https://dl.grafana.com/oss/release/grafana-7.3.4-1.x86_64.rpm #下载慢,可下载好后上传上去
sudo yum install grafana-7.3.4-1.x86_64.rpm -y
systemctl enable grafana-server.service
systemctl start grafana-server.service
grafana-cli plugins install alexanderzobnin-zabbix-app
systemctl restart grafana-server
grafana-cli admin reset-admin-password admin #修改admin密码
http://10.130.16.10:3000
默认账户:admin
密码:admin