tuto:monitoring:installer_le_serveur_zabbix_sur_centos

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
Dernière révision Les deux révisions suivantes
tuto:monitoring:installer_le_serveur_zabbix_sur_centos [24/05/2012 14:25]
dani [Création d'une base de donnée]
tuto:monitoring:installer_le_serveur_zabbix_sur_centos [04/12/2013 14:39]
dani [SELinux]
Ligne 1: Ligne 1:
-====== Installation d'un serveur CentOS ====== +====== Installation d'un serveur Zabbix sur CentOS ====== 
-Suivre [[base_install_cos5|ces instructions]]+ 
 +Cette page est une prise de notes pour l'installation d'un serveur Zabbix (avec base MySQL) sur une CentOS 6 x6_64. Avant d'attaquer cette partie, il faut préparer le système de base en suivant [[tuto:linux_divers:base_install_cos6|ces instructions]].
  
 ====== Installation de Zabbix ====== ====== Installation de Zabbix ======
 <code> <code>
-yum --enablerepo=rpmforge --enablerepo=fws install zabbix-server-mysql zabbix-agent zabbix-web-mysql mysql-server httpd php-gd php-mysql php-bcmath mod_ssl --exclude=*i386+yum --enablerepo=fws install zabbix-server-mysql zabbix-agent 
 +    zabbix-web-mysql mysql-server httpd php-gd php-mysql php-bcmath 
 +    mod_ssl --exclude=*i386
 </code> </code>
  
-NOTE: le --exclude=*i386 est seulement valable si le serveur est en 64bits 
- 
-Pour CentOS 6 et Zabbix 2: 
- 
-<code bash> 
-yum --enablerepo=fws-testing install zabbix-server-mysql zabbix-web-mysql php-mysql mod_ssl mysql-server 
-</code> 
 ====== Configuration mysql ====== ====== Configuration mysql ======
  
Ligne 25: Ligne 21:
  
 ===== Configuration my.cnf ===== ===== Configuration my.cnf =====
 +
  
 Et y placer les lignes suivantes (à ajuster en fonction des performances du serveur) Et y placer les lignes suivantes (à ajuster en fonction des performances du serveur)
 +
 +
 <code> <code>
 [mysqld] [mysqld]
Ligne 35: Ligne 34:
 innodb_data_file_path = ibdata1:10M:autoextend innodb_data_file_path = ibdata1:10M:autoextend
 innodb_log_group_home_dir = /var/lib/mysql/ innodb_log_group_home_dir = /var/lib/mysql/
-innodb_log_arch_dir = /var/lib/mysql/ +innodb_buffer_pool_size = 1G
-innodb_buffer_pool_size = 256M+
 innodb_additional_mem_pool_size = 128M innodb_additional_mem_pool_size = 128M
-innodb_log_file_size = 64M+innodb_log_file_size = 300M
 innodb_log_buffer_size = 8M innodb_log_buffer_size = 8M
 innodb_flush_log_at_trx_commit = 2 innodb_flush_log_at_trx_commit = 2
Ligne 64: Ligne 62:
 skip-external-locking skip-external-locking
 key_buffer_size = 128M key_buffer_size = 128M
-thread_stack = 128K+thread_stack = 256K
 thread_cache_size = 4 thread_cache_size = 4
 tmp_table_size=256M tmp_table_size=256M
Ligne 72: Ligne 70:
 query_cache_type = 1 query_cache_type = 1
 #skip-bdb #skip-bdb
- 
  
 [mysqldump] [mysqldump]
Ligne 86: Ligne 83:
  
 ===== Définition d'un mot de passe root ===== ===== Définition d'un mot de passe root =====
 +
  
 <code> <code>
-/usr/bin/openssl rand -base64 60 | tr -c -d '[:alnum:]' > ~/.my.pw+/etc/init.d/mysqld start 
 +/usr/bin/openssl rand -base64 60 | tr -c -d '[:alnum:]'> ~/.my.pw
 chmod 600 ~/.my.pw chmod 600 ~/.my.pw
 /usr/bin/mysqladmin -u root password $(cat ~/.my.pw) /usr/bin/mysqladmin -u root password $(cat ~/.my.pw)
-echo '[client]' > ~/.my.cnf +echo '[client]'> ~/.my.cnf 
-echo "password="$(cat ~/.my.pw) >> ~/.my.cnf+echo "password="$(cat ~/.my.pw)>> ~/.my.cnf
 </code> </code>
  
 ===== Création d'une base de donnée ===== ===== Création d'une base de donnée =====
 +
  
 <code> <code>
-/usr/bin/openssl rand -base64 40 | tr -c -d '[:alnum:]' > /etc/zabbix/db.pw+/usr/bin/openssl rand -base64 40 | tr -c -d '[:alnum:]'> /etc/zabbix/db.pw
 chmod 600 /etc/zabbix/db.pw chmod 600 /etc/zabbix/db.pw
 mysql -e 'create database zabbixdb' mysql -e 'create database zabbixdb'
 mysql -e "grant all privileges on zabbixdb.* to 'zabbixuser'@'localhost' identified by '$(cat /etc/zabbix/db.pw)'" mysql -e "grant all privileges on zabbixdb.* to 'zabbixuser'@'localhost' identified by '$(cat /etc/zabbix/db.pw)'"
 mysql -e 'flush privileges' mysql -e 'flush privileges'
 +mysql zabbixdb </usr/share/doc/zabbix-server-*/database/mysql/schema.sql
 +mysql zabbixdb </usr/share/doc/zabbix-server-*/database/mysql/images.sql
 +mysql zabbixdb </usr/share/doc/zabbix-server-*/database/mysql/data.sql
 </code> </code>
  
Ligne 156: Ligne 159:
  
 ==== Mise en place des scripts ==== ==== Mise en place des scripts ====
 +
 +fping (utilisé par zabbix pour les vérifications ICMP) nécessite des droit élevés. Plutôt que de mettre les binaires fping en SUID, on crée des "wrapper" qui utilisent sudo 
 +
 <code> <code>
 mkdir -p /var/lib/zabbix/{tmp,bin,db} mkdir -p /var/lib/zabbix/{tmp,bin,db}
Ligne 178: Ligne 184:
  
 ==== Droits sudoers ==== ==== Droits sudoers ====
 +
 +
 <code> <code>
 visudo visudo
 </code> </code>
 +
 +
 Puis ajouter les lignes suivantes: Puis ajouter les lignes suivantes:
 +
 +
 <code> <code>
 Cmnd_Alias  ZABBIX_SERVER = /usr/sbin/fping, /usr/sbin/fping6 Cmnd_Alias  ZABBIX_SERVER = /usr/sbin/fping, /usr/sbin/fping6
 +Defaults:zabbix !requiretty
 +Defaults:zabbix secure_path = /var/lib/zabbix/bin:/sbin:/bin:/usr/sbin:/usr/bin
 zabbix   ALL=(root) NOPASSWD: ZABBIX_SERVER zabbix   ALL=(root) NOPASSWD: ZABBIX_SERVER
-</code> 
-Et commentez la ligne suivante: 
-<code> 
-Defaults requiretty 
 </code> </code>
  
Ligne 195: Ligne 205:
  
 Zabbix intègre une fonction de notification via XMPP, mais cette fonction ne supporte pas d'auth sécurisée TLS. Nous alons donc créer un nouveau media: Zabbix intègre une fonction de notification via XMPP, mais cette fonction ne supporte pas d'auth sécurisée TLS. Nous alons donc créer un nouveau media:
- 
  
 <code> <code>
 yum --enablerepo=fws install sendxmpp perl-IO-Socket-SSL yum --enablerepo=fws install sendxmpp perl-IO-Socket-SSL
 </code> </code>
- 
  
 <code> <code>
Ligne 227: Ligne 235:
 </code> </code>
  
- +Maintenant il ne reste plus qu'à créer le fichier /var/lib/zabbix/.sendxmpprc qui contiendra les informations (JID/pass) pour se connecter au serveur jabber:
-Maintenant il ne reste plus qu'à créer le fichier /var/lib/zabbix/.sendxmpprc qui contiendra les information (JID/pass) pour se connecter au serveur jabber: +
  
 <code> <code>
 vim /var/lib/zabbix/.sendxmpprc vim /var/lib/zabbix/.sendxmpprc
 </code> </code>
- 
  
 La syntaxe est la suivante: La syntaxe est la suivante:
- 
  
 <code> <code>
 zabbix@domain.tld password zabbix@domain.tld password
 </code> </code>
- 
  
 Il faut maintenant réduire les permissions sur ce fichier qui ne doit être accessible que pour l'utilisateur zabbix: Il faut maintenant réduire les permissions sur ce fichier qui ne doit être accessible que pour l'utilisateur zabbix:
- 
  
 <code> <code>
Ligne 254: Ligne 256:
  
 On peut maintenant rajouter le nouveau media, soit via l'interface web, soit avec cette requête SQL: On peut maintenant rajouter le nouveau media, soit via l'interface web, soit avec cette requête SQL:
- 
  
 <code> <code>
Ligne 280: Ligne 281:
 </code> </code>
  
 +==== SELinux ====
 +
 +
 +Sous CentOS 6, la politique SELinux par défaut va empêcher Zabbix d'utiliser la commande fping. Pour régler ce problème, on va créer une politique de sécurité personnalisée (au lieu de désactiver entièrement SELinux):
 +
 +
 +<code>
 +cat <<'EOF'> zabbix_server.te
 +module zabbix_server 1.0;
 +
 +require {
 +        type var_lib_t;
 +        type ping_t;
 +        type initrc_t;
 +        type unlabeled_t;
 +        class file { read getattr };
 +        class sem { unix_read unix_write associate destroy };
 +        class shm { unix_read unix_write associate destroy };
 +        class tcp_socket { create getattr accept shutdown read };
 +        class netlink_route_socket { create bind };
 +}
 +
 +#============= ping_t ==============
 +allow ping_t var_lib_t:file { read getattr };
 +allow initrc_t unlabeled_t:sem { unix_read unix_write associate destroy };
 +allow initrc_t unlabeled_t:shm { unix_read unix_write associate destroy };
 +allow unlabeled_t self:tcp_socket { create getattr accept shutdown read };
 +allow unlabeled_t self:netlink_route_socket { create bind };
 +EOF
 +checkmodule -M -m -o zabbix_server.mod zabbix_server.te
 +semodule_package -o zabbix_server.pp -m zabbix_server.mod
 +cp zabbix_server.pp /usr/share/selinux/packages
 +semodule -i zabbix_server.pp
 +</code>
 +
 +<code bash>
 +cat <<'EOF' > zabbix_agent.te
 +module zabbix_agent 1.0;
 +
 +require {
 +        type unlabeled_t;
 +        type root_t;
 +        type proc_t;
 +        type var_t;
 +        type var_log_t;
 +        type device_t;
 +        type fs_t;
 +        type sysctl_t;
 +        class process { fork sigchld setpgid };
 +        class netlink_route_socket { getattr write nlmsg_read read };
 +        class dir { read search getattr append };
 +        class tcp_socket write;
 +        class fifo_file read;
 +        class filesystem getattr;
 +}
 +
 +#============= unlabeled_t ==============
 +allow unlabeled_t root_t:dir search;
 +allow unlabeled_t proc_t:dir search;
 +allow unlabeled_t self:netlink_route_socket { getattr write nlmsg_read read };
 +allow unlabeled_t self:tcp_socket write;
 +allow unlabeled_t self:process { fork sigchld setpgid };
 +allow unlabeled_t var_t:dir search;
 +allow unlabeled_t var_log_t:dir search;
 +allow unlabeled_t self:fifo_file read;
 +allow unlabeled_t device_t:dir search;
 +allow unlabeled_t fs_t:filesystem getattr;
 +allow unlabeled_t sysctl_t:dir { read getattr search append };
 +EOF
 +checkmodule -M -m -o zabbix_agent.mod zabbix_agent.te
 +semodule_package -o zabbix_agent.pp -m zabbix_agent.mod
 +cp zabbix_agent.pp /usr/share/selinux/packages
 +semodule -i zabbix_agent.pp
 +</code>
 +
 +
 +Il faut aussi activer un booléen SELinux:
 +
 +
 +<code>
 +setsebool -P domain_kernel_load_modules=on
 +</code>
 ==== Agent ==== ==== Agent ====
 Sauvegarde de la config par défaut: Sauvegarde de la config par défaut:
Ligne 300: Ligne 383:
 LogFileSize=0 LogFileSize=0
 Timeout=6 Timeout=6
-UserParameter=cpu.number,cat /proc/cpuinfo | grep processor | wc -l 
-UserParameter=vm.memory.size.used,free -b | grep 'buffers/cache' | awk '{print $3}' 
-UserParameter=vm.memory.size.pused,echo $(($(free -b | grep 'buffers/cache' | awk '{print $3}')*100/$(free -b | grep 'Mem' | awk '{print $2}'))) 
-UserParameter=system.swap.size.used,free -b | grep Swap | awk '{print $3}' 
 </code> </code>
  
Ligne 319: Ligne 398:
   * On commente les lignes ''<VirtualHost _default_:443>'' et ''</VirtualHost>''   * On commente les lignes ''<VirtualHost _default_:443>'' et ''</VirtualHost>''
   * On rajoute ''</IfModule>'' tout à la fin   * On rajoute ''</IfModule>'' tout à la fin
 +  * On rajoute la directive "NameVirtualHost 0.0.0.0:443"
 +
 +Il faut aussi éditer le fichier **/etc/httpd/conf/httpd.conf** pour y ajouter: "NameVirtualHost 0.0.0.0:80"
 +
  
 Il faut maintenant mettre en place la configuration pour Zabbix: Il faut maintenant mettre en place la configuration pour Zabbix:
Ligne 432: Ligne 515:
  
  
-**__Attention__**: ne surtout pas mettre de retour chariot après le ?>, sous peine de perdre plusieurs heures à vous demander pourquoi aucune images (maps, screens, graphs) ne s'affiche ;)+<note important> ne surtout pas mettre de retour chariot après le ?>, sous peine de perdre plusieurs heures à vous demander pourquoi aucune images (maps, screens, graphs) ne s'affiche ;)</note>
  
 Et mettre le mot de passe mysql à jour: Et mettre le mot de passe mysql à jour:
  • tuto/monitoring/installer_le_serveur_zabbix_sur_centos.txt
  • Dernière modification: 14/04/2014 18:18
  • de dani