zabbix5.0+grafana7.3-LAMP部署

部署环境

hostnameip安装OS
zabbix10.130.16.10zabbix grafanacentos7.9
mariadb10.130.16.11mariadbcentos7.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
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值