Difference between revisions of "Zabbix Server Installation"
Michael.mast (talk | contribs) |
Michael.mast (talk | contribs) (→Client) |
||
(16 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
==Server== | ==Server== | ||
+ | ===Amazon Linux 2=== | ||
+ | In this case I am moving an existing installation to an EC2 instance for testing purposes. Sizing and pricing is the name of the game here. I have a t2.large instance with 20GB SSD boot disk and 200GB magnetic data disk. We will be placing the database on the magnetic volume until AWS RDS is ready to take the load. | ||
+ | |||
+ | ====Docker==== | ||
+ | Forget all that, lets use docker <s>and AWS RDS Serverless</s>! | ||
+ | <pre> | ||
+ | sudo yum -y update | ||
+ | sudo yum -y install docker | ||
+ | sudo docker pull zabbix/zabbix-server-mysql | ||
+ | sudo docker pull zabbix/zabbix-web-apache-mysql | ||
+ | </pre> | ||
+ | I already had a database, so I wanted to import it into the new database container. Problem I can into was that the latest version of MySQL has some new authentication that needs to be addressed.<ref>https://stackoverflow.com/questions/49019652/not-able-to-connect-to-mysql-docker-from-local</ref> | ||
+ | *In the following example I mounted the mysql directory to a host directory for easier management. | ||
+ | *I also had created a new bridge network so I could take advantage of service discovery. | ||
+ | <pre> | ||
+ | |||
+ | sudo docker run --name zabbix-db -e MYSQL_ROOT_PASSWORD=<password> -e MYSQL_USER='zabbix' -e MYSQL_PASSWORD='<password>' -v /home/ec2-user/db:/var/lib/mysql -e MYSQL_DATABASE=zabbix --network=newbridge --restart=unless-stopped -d mysql:latest | ||
+ | |||
+ | sudo docker exec -it zabbix-db mysql -uroot -p<password> mysql -e "alter user 'zabbix'@'%' identified with mysql_native_password by '<password>';" | ||
+ | |||
+ | sudo docker run --name zabbix-server -t -e DB_SERVER_HOST='zabbix-db' -e MYSQL_USER='zabbix' -e MYSQL_PASSWORD='<password>' -p 10050:10050 -p 10051:10051 --restart=unless-stopped --network=newbridge -d zabbix/zabbix-server-mysql:latest | ||
+ | |||
+ | sudo docker run --name zabbix-web -t -e DB_SERVER_HOST='zabbix-db' -e MYSQL_USER='zabbix' -e MYSQL_PASSWORD='<password>' -e ZBX_SERVER_HOST='zabbix-server' -e PHP_TZ='America/New_York' -p 80:80 --restart=unless-stopped --network=newdbridge -d zabbix/zabbix-web-apache-mysql:latest | ||
+ | </pre> | ||
+ | |||
+ | ====Standard Install==== | ||
+ | =====Install Packages===== | ||
+ | <pre> | ||
+ | sudo yum -y upgrade | ||
+ | sudo amazon-linux-extras install lamp-mariadb10.2-php7.2 | ||
+ | sudo yum -y install mod_ssl yum-cron php-mbstring php-gd php-bcmath php-xml php-session htop firewalld mariadb-server | ||
+ | sudo reboot | ||
+ | </pre> | ||
+ | =====Configure data disk===== | ||
+ | <ref>https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/logical_volume_manager_administration/lvm_examples</ref> | ||
+ | <pre> | ||
+ | sudo echo -e "n\n\n\n\n\nw\n" fdisk /dev/sdb | ||
+ | sudo pvcreate /dev/sdb1 | ||
+ | sudo vgcreate data /dev/sdb1 | ||
+ | sudo lvcreate -L 199G -n data_vol data | ||
+ | sudo mkfs.xfs /dev/data/data_vol | ||
+ | sudo mkdir /data | ||
+ | sudo mount /dev/data/data_vol /data/ | ||
+ | </pre> | ||
+ | Be sure to update fstab with the mount point as well | ||
+ | =====Configure Database===== | ||
+ | <ref>https://stackoverflow.com/questions/1795176/how-to-change-mysql-data-directory</ref> | ||
+ | <pre> | ||
+ | </pre> | ||
+ | |||
===CentOS 7=== | ===CentOS 7=== | ||
rpm -ivh http://repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm | rpm -ivh http://repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm | ||
Line 56: | Line 106: | ||
If everything is working reboot the server, and test again. | If everything is working reboot the server, and test again. | ||
+ | |||
==Client== | ==Client== | ||
===CentOS 7=== | ===CentOS 7=== | ||
Line 69: | Line 120: | ||
systemctl start zabbix-agent | systemctl start zabbix-agent | ||
</pre> | </pre> | ||
+ | ===Ubuntu 16.04=== | ||
+ | <ref>https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-zabbix-to-securely-monitor-remote-servers-on-ubuntu-16-04</ref> | ||
+ | <pre> | ||
+ | wget http://repo.zabbix.com/zabbix/3.2/ubuntu/pool/main/z/zabbix-release/zabbix-release_3.2-1+xenial_all.deb | ||
+ | sudo dpkg -i zabbix-release_3.2-1+xenial_all.deb | ||
+ | sudo apt-get install zabbix-agent | ||
+ | sudo sed -i 's/^Server=127.0.0.1/Server=<your server>/' /etc/zabbix/zabbix_agentd.conf | ||
+ | sudo sed -i 's/^ServerActive=127.0.0.1/ServerActive=<your server>/' /etc/zabbix/zabbix_agentd.conf | ||
+ | sudo sed -i 's/^Hostname=Zabbix server/#Hostname=Zabbix server/' /etc/zabbix/zabbix_agentd.conf | ||
+ | sudo sed -i 's/^#HostnameItem=/HostnameItem=system.hostname/' /etc/zabbix/zabbix_agentd.conf | ||
+ | sudo sed -i 's/^#HostMetadataItem=/HostMetadataItem=system.uname/' /etc/zabbix/zabbix_agentd.conf | ||
+ | systemctl enable zabbix-agent | ||
+ | systemctl start zabbix-agent | ||
+ | </pre> | ||
+ | ===Windows Server=== | ||
+ | Using powershell to install to a remote system.<ref>https://www.zabbix.com/documentation/4.2/manual/installation/install_from_packages/win_msi</ref> | ||
+ | <pre> | ||
+ | $session=New-PSSession -ComputerName computer2 | ||
+ | copy-item -tosession $session -path C:\<local directory>\zabbix_agent.msi -destination C:\<remote directory>\zabbix_agent.msi | ||
+ | enter-pssession -session $session | ||
+ | cd c:\<destination directory from above> | ||
+ | msi /i zabbix_agent.msi /qn SERVER=<zabbix server> | ||
+ | exit | ||
+ | remove-pssession -session $session | ||
+ | </pre> | ||
+ | |||
+ | ==Proxy== | ||
+ | ===Docker=== | ||
+ | <pre> | ||
+ | sudo docker run --name zabbix-db -e MYSQL_ROOT_PASSWORD=<password> -e MYSQL_USER='zabbix' -e MYSQL_PASSWORD='<password>' -e MYSQL_DATABASE=zabbix_proxy --network=newbridge --restart=unless-stopped -d mysql:latest | ||
+ | |||
+ | sudo docker exec -it zabbix-db mysql -uroot -p<password> mysql -e "alter user 'zabbix'@'%' identified with mysql_native_password by '<password>';" | ||
+ | |||
+ | sudo docker run --name zabbix-proxy -t -e DB_SERVER_HOST='zabbix-db' -e MYSQL_USER='zabbix' -e MYSQL_PASSWORD='<password>' -e ZBX_PROXYMODE=1 -e ZBX_SERVER_HOST='<zabbix server>' \ | ||
+ | -e PHP_TZ='America/New_York' -p 10050:10050 -p 10051:10051 --restart=unless-stopped --network=newbridge -d zabbix/zabbix-proxy-mysql:latest | ||
+ | </pre> | ||
+ | ====Docker on same host with Zgent==== | ||
+ | Trying to install on host with agent already running. There was a port conflict on 10050. | ||
+ | *Update /etc/zabbix/zabbix_agentd.conf with another port (ie 10055) | ||
+ | *Update selinux | ||
+ | <pre> | ||
+ | semanage port -a -t zabbix_agent_port_t -p tcp 10055 | ||
+ | </pre> | ||
+ | *Update zabbix server with new port for the agent on this host | ||
+ | *Start zabbix-proxy docker container | ||
==Troubleshooting== | ==Troubleshooting== |
Latest revision as of 09:08, 13 November 2019
Contents
Server
Amazon Linux 2
In this case I am moving an existing installation to an EC2 instance for testing purposes. Sizing and pricing is the name of the game here. I have a t2.large instance with 20GB SSD boot disk and 200GB magnetic data disk. We will be placing the database on the magnetic volume until AWS RDS is ready to take the load.
Docker
Forget all that, lets use docker and AWS RDS Serverless!
sudo yum -y update sudo yum -y install docker sudo docker pull zabbix/zabbix-server-mysql sudo docker pull zabbix/zabbix-web-apache-mysql
I already had a database, so I wanted to import it into the new database container. Problem I can into was that the latest version of MySQL has some new authentication that needs to be addressed.[1]
- In the following example I mounted the mysql directory to a host directory for easier management.
- I also had created a new bridge network so I could take advantage of service discovery.
sudo docker run --name zabbix-db -e MYSQL_ROOT_PASSWORD=<password> -e MYSQL_USER='zabbix' -e MYSQL_PASSWORD='<password>' -v /home/ec2-user/db:/var/lib/mysql -e MYSQL_DATABASE=zabbix --network=newbridge --restart=unless-stopped -d mysql:latest sudo docker exec -it zabbix-db mysql -uroot -p<password> mysql -e "alter user 'zabbix'@'%' identified with mysql_native_password by '<password>';" sudo docker run --name zabbix-server -t -e DB_SERVER_HOST='zabbix-db' -e MYSQL_USER='zabbix' -e MYSQL_PASSWORD='<password>' -p 10050:10050 -p 10051:10051 --restart=unless-stopped --network=newbridge -d zabbix/zabbix-server-mysql:latest sudo docker run --name zabbix-web -t -e DB_SERVER_HOST='zabbix-db' -e MYSQL_USER='zabbix' -e MYSQL_PASSWORD='<password>' -e ZBX_SERVER_HOST='zabbix-server' -e PHP_TZ='America/New_York' -p 80:80 --restart=unless-stopped --network=newdbridge -d zabbix/zabbix-web-apache-mysql:latest
Standard Install
Install Packages
sudo yum -y upgrade sudo amazon-linux-extras install lamp-mariadb10.2-php7.2 sudo yum -y install mod_ssl yum-cron php-mbstring php-gd php-bcmath php-xml php-session htop firewalld mariadb-server sudo reboot
Configure data disk
sudo echo -e "n\n\n\n\n\nw\n" fdisk /dev/sdb sudo pvcreate /dev/sdb1 sudo vgcreate data /dev/sdb1 sudo lvcreate -L 199G -n data_vol data sudo mkfs.xfs /dev/data/data_vol sudo mkdir /data sudo mount /dev/data/data_vol /data/
Be sure to update fstab with the mount point as well
Configure Database
CentOS 7
rpm -ivh http://repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm yum install zabbix-server-mysql zabbix-web-mysql yum install mariadb-server mariadb
Database
The following commands are for database creation, but they are not specific. Needs work
shell> mysql -uroot -p<password> mysql> create database zabbix character set utf8 collate utf8_bin; mysql> grant all privileges on zabbix.* to zabbix@localhost identified by '<password>'; mysql> flush privileges; mysql> quit; cd /usr/share/doc/zabbix-server-mysql-3.0.4/create shell> cat create.sql | mysql -hxxx.xxx.xxx.xxx -uzabbix -p zabbix
Some packages might combine those three SQL files in one, so you will only have create.sql.gz. You can import it directly as "zcat create.sql.gz | mysql zabbix". If you want to see the SQL file, you can extract it with 'tar -xvf create.sql.gz' in a single step.
Config File
Edit the Zabbix Server configuration file
# vi /etc/zabbix/zabbix_server.conf DBHost=localhost DBName=zabbix DBUser=zabbix DBPassword=zabbix
Starting Service
Start the zabbix server
systemctl start zabbix-server
Edit the php configuration file to use the correct time zone /etc/httpd/conf.d/zabbix.conf
php_value max_execution_time 300 php_value memory_limit 128M php_value post_max_size 16M php_value upload_max_filesize 2M php_value max_input_time 300 php_value date.timezone America/New_York
Start http
systemctl start httpd
SELinus
Configure SELinux to allow the above services network access
setsebool -P zabbix_can_network=true setsebool -P httpd_can_network_connect=true
Enable all service
=Enable services
systemctl enable mariadb systemctl enable httpd systemctl enable zabbix-server
At this point you should be able to access the web interface by going to <IP of host>/zabbix. User/password is admin/zabbix.
If everything is working reboot the server, and test again.
Client
CentOS 7
rpm -ivh http://repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm yum -y install zabbix-agent sed -i 's/^Server=127.0.0.1/Server=<your server>/' /etc/zabbix/zabbix_agentd.conf sed -i 's/^ServerActive=127.0.0.1/ServerActive=<your server>/' /etc/zabbix/zabbix_agentd.conf sed -i 's/^Hostname=Zabbix server/#Hostname=Zabbix server/' /etc/zabbix/zabbix_agentd.conf sed -i 's/^#HostnameItem=/HostnameItem=system.hostname/' /etc/zabbix/zabbix_agentd.conf sed -i 's/^#HostMetadataItem=/HostMetadataItem=system.uname/' /etc/zabbix/zabbix_agentd.conf systemctl enable zabbix-agent systemctl start zabbix-agent
Ubuntu 16.04
wget http://repo.zabbix.com/zabbix/3.2/ubuntu/pool/main/z/zabbix-release/zabbix-release_3.2-1+xenial_all.deb sudo dpkg -i zabbix-release_3.2-1+xenial_all.deb sudo apt-get install zabbix-agent sudo sed -i 's/^Server=127.0.0.1/Server=<your server>/' /etc/zabbix/zabbix_agentd.conf sudo sed -i 's/^ServerActive=127.0.0.1/ServerActive=<your server>/' /etc/zabbix/zabbix_agentd.conf sudo sed -i 's/^Hostname=Zabbix server/#Hostname=Zabbix server/' /etc/zabbix/zabbix_agentd.conf sudo sed -i 's/^#HostnameItem=/HostnameItem=system.hostname/' /etc/zabbix/zabbix_agentd.conf sudo sed -i 's/^#HostMetadataItem=/HostMetadataItem=system.uname/' /etc/zabbix/zabbix_agentd.conf systemctl enable zabbix-agent systemctl start zabbix-agent
Windows Server
Using powershell to install to a remote system.[5]
$session=New-PSSession -ComputerName computer2 copy-item -tosession $session -path C:\<local directory>\zabbix_agent.msi -destination C:\<remote directory>\zabbix_agent.msi enter-pssession -session $session cd c:\<destination directory from above> msi /i zabbix_agent.msi /qn SERVER=<zabbix server> exit remove-pssession -session $session
Proxy
Docker
sudo docker run --name zabbix-db -e MYSQL_ROOT_PASSWORD=<password> -e MYSQL_USER='zabbix' -e MYSQL_PASSWORD='<password>' -e MYSQL_DATABASE=zabbix_proxy --network=newbridge --restart=unless-stopped -d mysql:latest sudo docker exec -it zabbix-db mysql -uroot -p<password> mysql -e "alter user 'zabbix'@'%' identified with mysql_native_password by '<password>';" sudo docker run --name zabbix-proxy -t -e DB_SERVER_HOST='zabbix-db' -e MYSQL_USER='zabbix' -e MYSQL_PASSWORD='<password>' -e ZBX_PROXYMODE=1 -e ZBX_SERVER_HOST='<zabbix server>' \ -e PHP_TZ='America/New_York' -p 10050:10050 -p 10051:10051 --restart=unless-stopped --network=newbridge -d zabbix/zabbix-proxy-mysql:latest
Docker on same host with Zgent
Trying to install on host with agent already running. There was a port conflict on 10050.
- Update /etc/zabbix/zabbix_agentd.conf with another port (ie 10055)
- Update selinux
semanage port -a -t zabbix_agent_port_t -p tcp 10055
- Update zabbix server with new port for the agent on this host
- Start zabbix-proxy docker container
Troubleshooting
- Reset the password: use zabbix; update zabbix.users set passwd=md5('newpass') where alias='Admin';
https://www.zabbix.com/documentation/3.0/manual/installation/install_from_packages
https://www.zabbix.com/documentation/3.0/manual/appendix/install/db_scripts
https://www.zabbix.com/forum/showthread.php?p=169500
https://www.rackspace.com/knowledge_center/article/installing-mysql-server-on-centos
- ↑ https://stackoverflow.com/questions/49019652/not-able-to-connect-to-mysql-docker-from-local
- ↑ https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/logical_volume_manager_administration/lvm_examples
- ↑ https://stackoverflow.com/questions/1795176/how-to-change-mysql-data-directory
- ↑ https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-zabbix-to-securely-monitor-remote-servers-on-ubuntu-16-04
- ↑ https://www.zabbix.com/documentation/4.2/manual/installation/install_from_packages/win_msi