Рубрики
syslog \ rsyslog \ zabbix

zabbix 7.0 install

Ссылки:

https://www.zabbix.com/download?zabbix=7.0&os_distribution=debian&os_version=12&components=server_frontend_agent&db=mysql&ws=apache

install

0. Качаем и ставим пакет:
wget https://repo.zabbix.com/zabbix/7.0/debian/pool/main/z/zabbix-release/zabbix-release_latest_7.0+debian12_all.deb
dpkg -i zabbix-release_latest_7.0+debian12_all.deb
apt update

1. Ставим пакеты:
apt install zabbix-server-mysql zabbix-frontend-php zabbix-apache-conf zabbix-sql-scripts zabbix-agent

2. Создаем базу:
mysql -uroot -p
---------------
create database zabbix character set utf8mb4 collate utf8mb4_bin;
create user zabbix@localhost identified by 'password';
grant all privileges on zabbix.* to zabbix@localhost;
set global log_bin_trust_function_creators = 1;
quit;
----------------


3. Заливаем базу zabbix:
zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 -uzabbix -p zabbix

4. Отключите опцию log_bin_trust_function_creators после импорта схемы базы данных.
mysql -uroot -p
---------------
set global log_bin_trust_function_creators = 0;
quit;
---------------


5. Редактируем конфиг и пароль для базы:
vim /etc/zabbix/zabbix_server.conf
----------------------------------
DBPassword=password
----------------------------------

6. Запускаем zabbix 
systemctl restart zabbix-server zabbix-agent apache2
systemctl enable zabbix-server zabbix-agent apache2

Пример ansible book

mkdir prod 
cd prod

cat > install_zabbix_7.yaml << "EOF"
---
- name: Install Zabbix vesrion 7 on server Debian 12
  hosts: all
  become: yes
  vars:
     mysql_root_password: "password"
     ansible_fqdn: zabbix
     destin_file_cnf: /root/.my.cnf
     source_file_cnf: ./my.cnf
     zabbix_user: "zabbix"
     zabbix_password: "zabbix"
     zabbix_db: "zabbix"
     zabbix_host: "localhost"
     zabbix_priv: "{{ zabbix_db }}.*:ALL"
     destin_conf: /usr/share/zabbix/conf/zabbix.conf.php
     source_conf: ./zabbix.conf.php        

  tasks:
  - name: Update apt repo and cache on all Debian/Ubuntu boxes
    apt: update_cache=yes force_apt_get=yes cache_valid_time=3600

  - name: Upgrade all packages on servers
    apt: upgrade=dist force_apt_get=yes

  - name: Install a .deb package from the internet
    apt:
      deb: https://repo.zabbix.com/zabbix/7.0/debian/pool/main/z/zabbix-release/zabbix-release_latest_7.0+debian12_all.deb 

  - name: Run the equivalent of "apt-get update" as a separate step
    apt:
      update_cache: yes
      cache_valid_time: 3600  

  - name: Install a list of packages
    apt:
      pkg:
        - zabbix-server-mysql
        - zabbix-frontend-php
        - zabbix-apache-conf
        - zabbix-agent
        - mariadb-server
        - python3-apt
        - python3 
        - python3-pip 
        - python3-setuptools
        - python3-pymysql 
        - zabbix-agent  
        - zabbix-sql-scripts
      state: latest
      update_cache: True    

  - name: Copy file cnf to Servers
    copy: src={{ source_file_cnf }} dest={{ destin_file_cnf }} mode=0600 owner=root group=root backup=yes 

  - name: Edit line password
    lineinfile:
      path: /root/.my.cnf
      state: present
      regexp: '^password='
      line: 'password="{{ mysql_root_password }}"'


  - name: Remove the test database
    mysql_db:
      login_unix_socket: /var/run/mysqld/mysqld.sock
      name: test
      state: absent

  - name: Remove anonymous user
    mysql_user:
      login_unix_socket: /var/run/mysqld/mysqld.sock
      name: ''
      state: absent
  
  - name: Sets the root password 
    mysql_user:
       login_unix_socket: /var/run/mysqld/mysqld.sock
       user: root 
       password: "{{ mysql_root_password }}" 
       host: localhost  

  - name: "Create new databases with names {{ zabbix_user }}"
    mysql_db:
      login_unix_socket: /var/run/mysqld/mysqld.sock
      name: "{{ zabbix_user }}"
      encoding: utf8
      collation: utf8_bin
      state: present
  
  - name: "Add user and add  privilege for {{ zabbix_db }}"
    mysql_user:
      login_unix_socket: /var/run/mysqld/mysqld.sock
      login_host: "localhost"
      name: "{{ zabbix_db }}"
      password: "{{ zabbix_password }}"
      host: "localhost"
      priv: "{{ zabbix_priv }}"
      state: present
      append_privs: yes

 
  - name: Importing databases
    mysql_db:
      name: "{{ zabbix_db }}"
      login_user: "{{zabbix_user}}"
      login_host: localhost
      login_password: "{{ zabbix_password }}"
      config_file: no
      state: import
      encoding: utf8
      collation: utf8_bin
      target: "/usr/share/zabbix-sql-scripts/mysql/server.sql.gz"
               

  - name: Edit line db_password for zabbix-server
    lineinfile:
      path: /etc/zabbix/zabbix_server.conf
      state: present
      regexp: '^DBPassword='
      line: 'DBPassword={{ zabbix_password }}'

  - name: Edit line time zone
    lineinfile:
      path: /etc/zabbix/apache.conf
      state: present
      regexp: '^php_value date.timezone Europe/Riga'
      line: 'php_value date.timezone Europe/Moscow'

  - name: Copy file conf php to server zabbix
    copy: src={{ source_conf }} dest={{ destin_conf }} mode=0644 owner=root group=root backup=yes 

  - name: Service zabbix restart and add autostart
    shell: systemctl restart zabbix-server zabbix-agent apache2 &&  systemctl enable zabbix-server zabbix-agent apache2   


...

EOF

cat > my.cnf << "EOF"
[client]
user="root"
password=mysql_root_password
EOF


cat > hosts.txt << "EOF"
localhost ansible_connection=local
EOF


cat > ansible.cfg << "EOF"
[defaults]
#interpreter_python = /usr/bin/python3
host_key_cheking = false
allow_world_readable_tmpfiles= true #bug mysql import
inventory      = ./hosts.txt
forks          = 10
timeout = 10
log_path = ./ansible.log
pipelining = True
EOF


cat > zabbix.conf.php << "EOF"
 'http://localhost:9200',
//	'text' => 'http://localhost:9200'
//];
// Value types stored in Elasticsearch.
//$HISTORY['types'] = ['uint', 'text'];

// Used for SAML authentication.
// Uncomment to override the default paths to SP private key, SP and IdP X.509 certificates, and to set extra settings.
//$SSO['SP_KEY']			= 'conf/certs/sp.key';
//$SSO['SP_CERT']			= 'conf/certs/sp.crt';
//$SSO['IDP_CERT']		= 'conf/certs/idp.crt';
//$SSO['SETTINGS']		= [];
EOF


Объяснение плейбука:
Скачивание и установка пакета Zabbix: Используется модуль apt для установки пакета.
Обновление списка пакетов: Обновляет кэш пакетов.
Установка необходимых пакетов Zabbix: Устанавливает все необходимые пакеты.
Создание базы данных Zabbix: Использует модуль mysql_db для создания базы данных.
Создание пользователя Zabbix: Использует модуль mysql_user для создания пользователя и предоставления ему прав.
Установка параметра log_bin_trust_function_creators: Устанавливает переменную MySQL.
Импорт схемы базы данных Zabbix: Выполняет команду для импорта схемы.
Отключение опции log_bin_trust_function_creators: Устанавливает переменную обратно.
Редактирование конфигурационного файла Zabbix: Использует модуль lineinfile для изменения конфигурации.
Перезапуск Zabbix: Перезапускает службы Zabbix и Apache.


Запуск плейбука:
!!! отредактируй строку в пдлейбуке "hosts: your_target_hosts  # Replace with your target host group"
!!! например: hosts: all или укажи конкретный хост hosts: you_host
ansible-playbook install_zabbix_7.yaml
a2enmod ssl

Рубрики
syslog \ rsyslog \ zabbix

systemd-journald / сохранение логов на диск

Ссылки:

Journald. Шпаргалка по работе с journalctl.
https://habr.com/ru/companies/ruvds/articles/533918/ https://wiki.archlinux.org/title/Systemd/Journal https://wiki.archlinux.org/title/Systemd_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9)/Journal_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9)

Самый простой и стандартный случай случай

0. Редактируем конфиг:
vim /etc/systemd/journald.conf
------------------------------
Storage=persistent
SystemMaxUse=1G   # Настройте размер, сколько примерно хотите использовать
------------------------------

1. Перезапускаем демон
systemctl restart systemd-journald

Как может быть на устройстве загрузившегося с сд карты

0. Первым делом проверяем катало /var/log и файл /etc/fstab
Проверяем и заодно сколько места 
df -h /var/log
--------------
Filesystem      Size  Used Avail Use% Mounted on
tmpfs           1.9G  1.3M  1.9G   1% /var/volatile   
--------------

Проверяем  нет ли у нас монтирования в "/var/volatile" (собственно мы это уже увидели в команде df)
cat  /etc/fstab
--------------
# stock fstab - you probably want to override this with a machine specific one

/dev/root            /                    auto       defaults              1  1
proc                 /proc                proc       defaults              0  0
devpts               /dev/pts             devpts     mode=0620,ptmxmode=0666,gid=5      0  0
tmpfs                /run                 tmpfs      mode=0755,nodev,nosuid,strictatime 0  0
#tmpfs                /var/volatile        tmpfs      defaults              0  0                   < ------------ вот эту строку комментируем так как это и есть наша проблема

# uncomment this if your device has a SD/MMC/Transflash slot
#/dev/mmcblk0p1       /media/card          auto       defaults,sync,noauto  0  0

--------------

1.Редактируем файл если ошибка при выполнении команды "systemd-tmpfiles --create --prefix /var/log/journal"
Пример ошибки
systemd-tmpfiles --create --prefix /var/log/journal
---------------------------------------------------
/usr/lib/tmpfiles.d/dbus.conf:13: Line references path below legacy directory /var/run/, updating /var/run/dbus/containers → /run/dbus/containers; please update the tmpfiles.d/ drop-in file accordingly.
---------------------------------------------------

vim /usr/lib/tmpfiles.d/dbus.conf
Найдите строку, которая содержит путь /var/run/dbus/containers, и замените её на новый путь /run/dbus/containers.
---------------------------------
# Fields: type; path; mode; uid; gid; age; argument (symlink target)

# Make ${localstatedir}/lib/dbus (required for systemd < 237)
# Adjust mode and ownership if it already exists.
d /var/lib/dbus 0755 - - -

# Make ${localstatedir}/lib/dbus/machine-id a symlink to /etc/machine-id
# if it does not already exist
L /var/lib/dbus/machine-id - - - - /etc/machine-id

# Create ${runstatedir}/dbus/containers owned by the system bus user.
# org.freedesktop.DBus.Containers1 uses this to create sockets.
#d /var/run/dbus/containers 0755 messagebus - - -                                <------------- Вот эта строка мы ее закомментируем (поставили в начале "#")
d /run/dbus/containers 0755 root root -                                           <------------- Вот эту добавим 
----------------------------------


2. Выполняем перезагрузку устройства 
reboot

3. Проверяем что наши правки fstab сработали
df -h /var/log
--------------
Filesystem      Size  Used Avail Use% Mounted on
/dev/root        29G   26G  1.8G  94% /                     <---------------- Вот видим что каталог /var/log точка его монтирования корень диска


4. Приступаем к настройки systemd-journald
mkdir -p /var/log/journal
systemd-tmpfiles --create --prefix /var/log/journal
chown root:systemd-journal /var/log/journal
systemctl restart systemd-journald

5. Перезагружаем устройство несколько раз и убеждаемся что логи теперь сохраняются
ls -l /var/log/journal
journalctl -b 0
journalctl -b 1
journalctl -b 2
journalctl --list-boot
--------------




хз может пригодится

systemctl disable nexuscli.service
systemctl disable node-backend.service
systemctl disable node-frontend.service
systemctl stop nexuscli.service
systemctl stop node-backend.service
systemctl stop node-frontend.service



journalctl --vacuum-size=1000M
journalctl --vacuum-time=2weeks




Вариант загружать конфиг systemd-journald из другого файла
systemctl show systemd-journald.service -p FragmentPath -p DropInPaths
mkdir -p /etc/systemd/system/systemd-journald.service.d
vim /etc/systemd/system/systemd-journald.service.d/override.conf
----------------------------------------------------------------
[Service]
Environment=SYSTEMD_JOURNALD_STORAGE=persistent
----------------------------------------------------------------
systemctl daemon-reload
systemctl restart systemd-journald
Рубрики
syslog \ rsyslog \ zabbix

Как отключить вывод ошибок dmesg в консоль

!!! Совет плохой, но иногда надо, ибо что то сделать по tty (console 0) нет возможности, лезет куча сообщений
#отключить сообщения
dmesg --console-off
#отключить сообщения выше 1 уровня
dmesg --console-level 1


Рубрики
syslog \ rsyslog \ zabbix

librenms / debian 11

Ссылки:

https://docs.librenms.org/Installation/Install-LibreNMS/

Что?

Что то похожие на zabbix

Желательные репы для debian 11

0. vim /etc/apt/sources.list
-------------------------
deb http://deb.debian.org/debian bullseye main contrib non-free
deb-src http://deb.debian.org/debian bullseye main contrib non-free
 
deb http://deb.debian.org/debian-security/ bullseye-security main contrib non-free
deb-src http://deb.debian.org/debian-security/ bullseye-security main contrib non-free
 
deb http://deb.debian.org/debian bullseye-updates main contrib non-free
deb-src http://deb.debian.org/debian bullseye-updates main contrib non-free
 
deb http://deb.debian.org/debian bullseye-backports main contrib non-free
deb-src http://deb.debian.org/debian bullseye-backports main contrib non-free
-------------------------
1. Обновляем пакеты
apt update && apt upgrade -y 

Установка:

!!! Рекомендуется ставить на чистую систему

0. Ставим пакеты:
# apt install acl curl composer fping git graphviz imagemagick mariadb-client mariadb-server mtr-tiny nginx-full nmap php7.4-cli php7.4-curl php7.4-fpm php7.4-gd php7.4-gmp php7.4-json php7.4-mbstring php7.4-mysql php7.4-snmp php7.4-xml php7.4-zip python3-dotenv python3-pymysql python3-redis python3-setuptools python3-systemd python3-pip rrdtool snmp snmpd whois vim

apt install acl curl composer fping git graphviz imagemagick mariadb-client mariadb-server \
mtr-tiny nginx-full nmap php7.4-cli php7.4-curl php7.4-fpm php7.4-gd php7.4-gmp php7.4-json \ 
php7.4-mbstring php7.4-mysql php7.4-snmp php7.4-xml php7.4-zip python3-dotenv python3-pymysql \
python3-redis python3-setuptools python3-systemd python3-pip rrdtool snmp snmpd whois vim

1. Добавляем пользователя
useradd librenms -d /opt/librenms -M -r -s "$(which bash)"


2. Скачиваем дистрибутив
cd /opt
git clone https://github.com/librenms/librenms.git

3. Выставляем разрешения:
chown -R librenms:librenms /opt/librenms
chmod 771 /opt/librenms
setfacl -d -m g::rwx /opt/librenms/rrd /opt/librenms/logs /opt/librenms/bootstrap/cache/ /opt/librenms/storage/
setfacl -R -m g::rwx /opt/librenms/rrd /opt/librenms/logs /opt/librenms/bootstrap/cache/ /opt/librenms/storage/

4. Устанавливаем зависимости
!!! вводить по одной строчки
su - librenms
./scripts/composer_wrapper.php install --no-dev
exit

5. Иногда когда используется прокси пункт "4" не полностью срабатывает:
wget https://getcomposer.org/composer-stable.phar
mv composer-stable.phar /usr/bin/composer
chmod +x /usr/bin/composer

6. Настраиваем временную зону
!!! временные зоны смотреть тут  https://php.net/manual/en/timezones.php
!!! пример Europe/Moscow
Редактируем файлы:
vim /etc/php/7.4/fpm/php.ini
vim /etc/php/7.4/cli/php.ini
timedatectl set-timezone Europe/Moscow

7. Готовим базу:
После [mysqld] нужо добавить две строчки
vim /etc/mysql/mariadb.conf.d/50-server.cnf
-------------------------------------------
[mysqld]
innodb_file_per_table=1
lower_case_table_names=0
-------------------------------------------
Перезапустить базу:
systemctl enable mariadb
systemctl restart mariadb

8. Создаем пользователя и базу:
mysql -u root
CREATE DATABASE librenms CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'librenms'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON librenms.* TO 'librenms'@'localhost';
FLUSH PRIVILEGES;
exit

9. Меняем настройки  PHP-FPM
cp /etc/php/7.4/fpm/pool.d/www.conf /etc/php/7.4/fpm/pool.d/librenms.conf
vim /etc/php/7.4/fpm/pool.d/librenms.conf
-----------------------------------------
# Изменяем [www] на [librenms]:
[librenms]
# Изменяем user и group на "librenms":
user = librenms
group = librenms
# Изменяем listen на уникальный:
listen = /run/php-fpm-librenms.sock
-----------------------------------------

10. Создаем конфиг для nginx
vim /etc/nginx/sites-enabled/librenms.vhost
-------------------------------------------
server {
 listen      80;
 server_name librenms.example.com;
 server_name _;
 root        /opt/librenms/html;
 index       index.php;

 charset utf-8;
 gzip on;
 gzip_types text/css application/javascript text/javascript application/x-javascript image/svg+xml text/plain text/xsd text/xsl text/xml image/x-icon;

 location / {
  try_files $uri $uri/ /index.php?$query_string;
 }

 location ~ [^/]\.php(/|$) {
  fastcgi_pass unix:/run/php-fpm-librenms.sock;
  fastcgi_split_path_info ^(.+\.php)(/.+)$;
  include fastcgi.conf;
 }

 location ~ /\.(?!well-known).* {
  deny all;
 }
}
-------------------------------------------

11. Перезапускаем nginx и php7.4-fpm
rm /etc/nginx/sites-enabled/default
systemctl reload nginx
systemctl restart php7.4-fpm

12. Дополнительные фичи SNMP
ln -s /opt/librenms/lnms /usr/bin/lnms
#cp /opt/librenms/librenms.nonroot.cron /etc/cron.d/librenms
cp /opt/librenms/misc/lnms-completion.bash /etc/bash_completion.d/
cp /opt/librenms/snmpd.conf.example /etc/snmp/snmpd.conf
vim /etc/snmp/snmpd.conf
-----------------------
# Находим RANDOMSTRINGGOESHERE и меняем на свое комьюнити
-----------------------

13. Добавляем агент librenms
curl -o /usr/bin/distro https://raw.githubusercontent.com/librenms/librenms-agent/master/snmp/distro
chmod +x /usr/bin/distro
systemctl enable snmpd
systemctl restart snmpd

14. cron + logrotate
cp /opt/librenms/librenms.nonroot.cron /etc/cron.d/librenms
cp /opt/librenms/misc/librenms.logrotate /etc/logrotate.d/librenms

15. Далее заходим librenms.example.com (надеюсь догадались изменить на свой домен) и производим первую настройку
http://librenms.example.com/install

error virtual host

https://community.librenms.org/t/404-not-found-on-virtual-host/12771

Решение:
Зайти в веб морду
global-settings -> system -> server -> Specific URL
удалить http:
Рубрики
syslog \ rsyslog \ zabbix

debian 11 / snmp / snmpd / mibs / pass / extend

info snmp

SNMP (Simple Network Management Protocol 
Простой протокол сетевого управления стандартный интернет-протокол для управления устройствами в IP-сетях на основе архитектур TCP/UDP.

MIB (Managment Information Base)
Это структурированный текстовый файл или несколько файлов, которые содержат информацию о всех объектах устройства. 
Объектом может быть какая-нибудь настройка или параметры системы. У каждого объекта есть свой набор полей, таких как тип данных, 
доступность (чтение, запись), статус (обязательный, необязательный), текстовое название настройки. 
Также объект может содержать другие объекты.

OID — Object IDentificator - числовой идентификатор объекта в дереве MIB.

Object Name - имя объекта, уникальная константа для всего MIB, однозначно соответствующая определённому OID.

Типы запросов SNMP

Feature Version 1 Version 2C Version3
GET request + + +
GET-NEXT request + + +
SET request + + +
GET-BULK request + +
TRAP notification + + +
INFORM notification + +
Community based security + +
User based security +
Message Authentication +
Message Encryption (privacy) +

Типы данных SNMP

Тип Описание Пример Дополнительно
Integer32 Целое со знаком (32-бита)  .1.3.6.1.2.1.1.7.0 = INTEGER: 2 от -2147483648 до 2147483647
Counter32 Целое без знака (32-бита) .1.3.6.1.2.1.1.7.1 = Counter32: 1 от 0 до 4294967295, не доступно на запись, при переполнении сбрасывается в 0
Counter64 Целое без знака (64-бита) .1.3.6.1.2.1.31.1.1.1.8.6 = Counter64: 103 не доступно на запись, после переполнения сбрасывается в ноль
Gauge32 Целое без знака (32-бита) .1.3.6.1.2.1.2.2.1.5.49 = Gauge32: 100000000 от 0 до 4294967295
TimeTicks Целое без знака .1.3.6.1.2.1.1.3.0 = Timeticks: (1299250300) 150 days, 9:01:43.00 1/100 секунд, не уменьшаемое
OctetString Строка/Массив байт .1.3.6.1.2.1.1.9.1.3.1 = STRING: "RS capabilities" Обычно до 255 байт
Object Identifier OID .1.3.6.1.2.1.1.2.0 = OID: .1.3.6.1.4.1.3955.6.9.224.1  
IpAddress IP адрес .1.3.6.1.2.1.4.20.1.1.192.168.136.18 = IpAddress: 192.168.0.18  
HexString Шестнадцатеричная строка .1.3.6.1.2.1.2.2.1.6.1 = Hex-STRING: 3C DF 1E EA A7 65  
Null Нет значения или пустое .1.3.6.1.2.1.31.1.1.1.18.1 = ""  

debian 11 standart repository

vim /etc/apt/sources.list
-------------------------
deb http://deb.debian.org/debian bullseye main contrib non-free
deb-src http://deb.debian.org/debian bullseye main contrib non-free
 
deb http://deb.debian.org/debian-security/ bullseye-security main contrib non-free
deb-src http://deb.debian.org/debian-security/ bullseye-security main contrib non-free
 
deb http://deb.debian.org/debian bullseye-updates main contrib non-free
deb-src http://deb.debian.org/debian bullseye-updates main contrib non-free
 
deb http://deb.debian.org/debian bullseye-backports main contrib non-free
deb-src http://deb.debian.org/debian bullseye-backports main contrib non-free
-------------------------

Установка:

apt-get update && sudo apt-get install snmp snmpd
apt-get install snmp-mibs-downloader
download-mibs

Готовим конфиг snmpd.conf — Находим две строки и редактируем их:

!!! находим строку "#agentaddress 127.0.0.1,[::1]", приводим к виду "agentaddress  udp:161"
!!! находим строку "rocommunity  public default -V systemonly", приводим к виду "rocommunity  vasian 192.168.0.0/16"
!!! vasian - наше комьюнити
!!! 192.168.0.0/16 - наша сеть

vim /etc/snmp/snmpd.conf 
------------------------
#agentaddress  127.0.0.1,[::1]
agentaddress  udp:161

# Read-only access to everyone to the systemonly view
#rocommunity  public default -V systemonly
#rocommunity6 public default -V systemonly
rocommunity  vasian 192.168.0.0/16
------------------------

Проверка:

ss -alnp | grep snmp | grep 161

snmpwalk -v 2c -c myCommunity localhost
snmpwalk -v2c -c public localhost
snmpwalk -On -v2c -c public localhost
snmpwalk -v2c -c public 192.168.0.1
snmpwalk -v2c -c YouCommunity 192.168.0.1 | head

snmptranslate -Tp

snmp v3

0. Останавливаем демон snmpd
systemctl stop snmpd

1. Для snmpv3 требуется создать пользователя, для этого используется команда net-snmp-create-v3-user
net-snmp-create-v3-user [-ro] [-A authpass] [-a MD5|SHA] [-X privpass][-x DES|AES] [username]
net-snmp-create-v3-user -ro -A SecUREDpass -a SHA -X StRongPASS -x AES snmpreadonly
Выполнив эту команду в файл snmpd.conf (по умолчанию /etc/snmp/snmpd.conf, но могут быть и /var/lib/snmp/snmpd.conf, /usr/share/snmp/snmpd.conf )
createUser snmpreadonly SHA "SecUREDpass" AES StRongPASS
rouser snmpreadonly

2. Для проверки локально:
net-snmp-create-v3-user -x AES -a SHA

3. Запускаем демон snmpd
systemctl start snmpd
systemctl enable snmpd

4. Проверяем
snmpwalk -v3 -a SHA -A SecUREDpass -x AES -X StRongPASS -l authPriv -u snmpreadonly localhost | head -10


ЕЩЕ примеры запросов:

snmpget -v3 -u  -l  -a  -A  -x  -X   

SNMPv3 account information
Name:admin
Auth-password:admin0
Priv-Password:admin1

snmpget -v3 -u admin -l authPriv -a SHA -A admin0 -x AES -X admin1 192.168.0.253 1.3.6.1.2.1.1.1.0

Здесь:

-v3 — указывает использование SNMP v3.
-u admin — имя пользователя SNMP.
-l authPriv — уровень безопасности. Возможные значения:
noAuthNoPriv — без аутентификации и шифрования.
authNoPriv — только аутентификация.
authPriv — аутентификация и шифрование.
-a SHA — протокол аутентификации. Может быть SHA или MD5.
-A admin0 — пароль аутентификации.
-x AES — протокол шифрования. Может быть AES или DES.
-X admin1  — пароль шифрования.
192.168.0.253 — IP-адрес устройства.
1.3.6.1.2.1.1.1.0 — OID для проверки системного описания.



snmpget -v3 -u admin -l authPriv -a SHA -A admin0 -x AES -X admin1 192.168.0.253 1.3.6.1.2.1.1.1.0
snmpwalk -v3 -u admin -l authNoPriv -a SHA -A admin0 192.168.0.253
snmpwalk -v3 -u admin -l authPriv -a SHA -A admin0  -x DES -X admin1 192.168.0.253
snmpwalk -v3 -u admin -l authPriv -a MD5 -A admin0  -x AES -X admin1 192.168.0.253

Пример конфига snmpd.conf:

sysServices    72
master  agentx
agentaddress  udp:161
view   systemonly  included   .1.3.6.1.2.1.1
view   systemonly  included   .1.3.6.1.2.1.25.1
rocommunity  vasian 192.168.0.0/16
createUser snmpreadonly SHA "SecUREDpass" AES "StRongPASS"
rouser snmpreadonly

Пример тестового конфига snmpd.conf:

cat /etc/snmp/snmpd.conf | grep -Ev "^#|^$"
-------------------------------------------                                                                                                                                                                             
com2sec readonly  default         public
com2sec readwrite default         private
group MyROSystem v1        paranoid
group MyROSystem v2c       paranoid
group MyROSystem usm       paranoid
group MyROGroup v1         readonly
group MyROGroup v2c        readonly
group MyROGroup usm        readonly
group MyRWGroup v1         readwrite
group MyRWGroup v2c        readwrite
group MyRWGroup usm        readwrite
view all    included  .1                               80
view system included  .iso.org.dod.internet.mgmt.mib-2.system
access MyROSystem ""     any       noauth    exact  system none   none
access MyROGroup ""      any       noauth    exact  all    none   none
access MyRWGroup ""      any       noauth    exact  all    all    none
syslocation Unknown (configure /etc/snmp/snmpd.local.conf)
syscontact Root  (configure /etc/snmp/snmpd.local.conf)
exec shelltest /bin/sh /tmp/shtest
-------------------------------------------  

Выполнение скриптов с помощью snmpd пример:

0. Раскомментировать строку в файле “/etc/snmp/snmpd.conf”:
--------------------------------------------------------
exec shelltest /bin/sh /tmp/shtest
--------------------------------------------------------

1. Создать файл “/tmp/shtest” и добавить в него следующие:
cat > /tmp/shtest << "EOF"
#!/bin/bash
prog1=$(cat /sys/devices/system/cpu/cpufreq/policy0/cpuinfo_cur_freq)
prog2=$(val=$(cat /sys/class/thermal/thermal_zone0/temp) ; result=$(echo "scale=2; $val / 1000.0" | bc) ; printf "%.2f\n" "$result")
echo "freq_cpu=$prog1 Hz temper=$prog2 C"
EOF


2. Использование:
snmpwalk -v2c  -c public localhost .1.3.6.1.4.1.2021.8
snmpwalk -On -v2c  -c public localhost .1.3.6.1.4.1.2021.8

Шаги по добавлению сторонних MIB в SNMPD

0. Скачать MIB-файл: 
Убедитесь, что у вас есть MIB-файл, который вы хотите добавить.

1. Скопировать MIB-файл: 
Скопируйте ваш MIB-файл в каталог, где хранятся MIB-файлы. 
Обычно это /usr/share/snmp/mibs.
sudo cp ваш_файл.mib /usr/share/snmp/mibs/

2. Обновить конфигурацию snmpd: 
Отредактируйте конфигурационный файл snmpd.conf, чтобы убедиться, что демон snmpd загружает ваш MIB-файл.
Обычно конфигурационный файл находится в /etc/snmp/snmpd.conf.
sudo nano /etc/snmp/snmpd.conf
Добавить MIB-файл в конфигурацию: 
Вставьте строку, чтобы указать путь к новому MIB-файлу, если это необходимо. 
Например:
mibs +ВашMIB
Если переменная mibs не указана, snmpd будет загружать все MIB-файлы из директории /usr/share/snmp/mibs.

3. Перезапустить демон snmpd: 
После внесения изменений перезапустите демон snmpd, чтобы применить новые настройки.
sudo systemctl restart snmpd

4. Проверка:
snmpwalk -v 2c -c public localhost .1.3.6.1.4.1
Эта команда будет проходить по всем OID, начиная с базового OID для частных предприятий.
Если ваши MIB-файлы правильно установлены и загружены, вы увидите информацию из вашего MIB.

Пример скрипта pass на bash

#!/bin/bash
REQUEST_OID="$2"
echo "$REQUEST_OID"; 
case "$REQUEST_OID" in 
    .1.3.6.1.4.1.1958.1.0) 
        echo "string"; echo "TransmitDevice"; exit 0;;
    .1.3.6.1.4.1.1958.2.0) 
        echo "string"; echo "1.3.6.1.4.1.1958.7.2.2"; exit 0;; 
    .1.3.6.1.4.1.1958.3.0) 
        echo "integer"; echo "123"; exit 0;; 
    .1.3.6.1.4.1.1958.4.0) 
        echo "integer"; echo "100"; exit 0;;
    .1.3.6.1.4.1.1958.5.0) 
        echo "integer"; echo "2"; exit 0;;
    .1.3.6.1.4.1.1958.6.0) 
        echo "integer"; echo "3"; exit 0;;
    *) 
        echo "string"; echo "$@"; exit 0;; 
    esac 
    exit

Пример скрипта pass на golang

// // GOOS=linux GOARCH=arm64 go build -o dok_snmp_agent
package main

import (
	"fmt"
	"log"
	"os"
	"os/exec"
	"strings"
)

var cmdOutput string

func fprog_exec(cmd string) error {
	out, err := exec.Command("bash", "-c", cmd).Output()
	if err != nil {
		return err
	}
	cmdOutput = strings.TrimSpace(string(out))
	return nil
}

func main() {
	if len(os.Args) < 2 {
		fmt.Println("Usage: go run script.go REQUEST_OID")
		os.Exit(1)
	}

	requestOID := os.Args[2]
	fmt.Println(requestOID)

	switch requestOID {
	case ".1.3.6.1.4.1.52666.5.1.2.1.0":
               // Пример как можно выполнять команду 
		err := fprog_exec(`ps -uaxf | grep root | head`)
		if err != nil {
			log.Fatalf("Command failed: %v", err)
		}
		fmt.Println("integer")
		//fmt.Println(cmdOutput + ".01")
		fmt.Println(cmdOutput)
		os.Exit(0)

	case ".1.3.6.1.4.1.52666.5.1.1.1.0":
		//text
		fmt.Println("string")
		fmt.Println("LOLOLO")
		os.Exit(0)

	case ".1.3.6.1.4.1.1958.1.0":
		fmt.Println("string")
		fmt.Println("TransmitDevice")
		os.Exit(0)
	case ".1.3.6.1.4.1.1958.2.0":
		fmt.Println("string")
		fmt.Println("1.3.6.1.4.1.1958.7.2.2")
		os.Exit(0)
	case ".1.3.6.1.4.1.1958.3.0":
		fmt.Println("integer")
		fmt.Println("123")
		os.Exit(0)
	case ".1.3.6.1.4.1.1958.4.0":
		fmt.Println("integer")
		fmt.Println("100")
		os.Exit(0)
	case ".1.3.6.1.4.1.1958.5.0":
		fmt.Println("integer")
		fmt.Println("2")
		os.Exit(0)
	case ".1.3.6.1.4.1.1958.6.0":
		fmt.Println("integer")
		fmt.Println("3")
		os.Exit(0)
	default:
		fmt.Println("string")
		fmt.Println(requestOID)
	}
}

Примеры конфигов snmp и snmpd для pass

cat /etc/snmp/snmp.conf
-----------------------
mibs +DOK-PtMp-V-MIB
mibs +ALL
-----------------------

cat /etc/snmp/snmpd.conf
------------------------
com2sec AllUser default public
group AllGroup v2c AllUser
view AllView included .1
access AllGroup "" any noauth exact AllView none none

#You agent
pass .1.3.6.1.4.1.52666 /usr/bin/you_agent
pass .1.3.6.1.4.1.1958 /usr/bin/you_agent
------------------------

Примеры с программами для проверки pass скриптов

snmptranslate -Tp - распечатать таблицу с подключенными мибами

snmpd -f -LsC -Ducd-snmp/pass - запускаем snmpd в режиме дебага для pass (pkill snmpd)
snmpd -f -Lo -DALL - запускаем snmpd в режиме дебага

snmpdctl -L - эта команда выведет список текущих расширений, которые настроены для вашего агента SNMP
snmptranslate -Tp -m /usr/share/snmp/mibs/Test_MIB_with_ending.txt - проверка мибы
snmptranslate -Tp -m SIMPLE-MIB - проверка мибы по ее имени

snmpwalk -v2c  -c public localhost  .1.3.6.1.4.1.52880.5.1.1.1.0 -m /usr/share/snmp/mibs/DOK-PtMP-V-MIB.txt - проверяем конкретный OID и мибу
snmpget -v2c  -c public localhost  .1.3.6.1.4.1.52880.5.1.1.1.0 -m /usr/share/snmp/mibs/DOK-PtMP-V-MIB.txt - проверяем конкретный OID и мибу

snmpwalk -v2c  -c public localhost .1.3.6.1.4.1.52880.5.1.1.1.0 
snmpget -v2c  -c public localhost .1.3.6.1.4.1.52880.5.1.1.1.0 

snmptranslate  -m /usr/share/snmp/mibs/DOK-PtMP-V-MIB.mib  -Dparse -Dtoken .1.3.6.1.4.1.52880.5.1.1.1.0

Ссылки:

https://stackoverflow.com/questions/47210999/snmp-pass-through-command-not-returning-with-snmpget
https://www.linuxshop.ru/forum/f35/t41586--resheno-no-such-instance-currently-exists-at-this-oid-uzel-v-zabbix-apc-smart-ups-3000.html
https://electronix.ru/forum/topic/79563-snmpd-mib-obrabotchik-i-vse-eto-na-linux/
https://net-snmp.sourceforge.io/wiki/
https://github.com/net-snmp/net-snmp
https://ru.wikipedia.org/wiki/Net-SNMP
Рубрики
syslog \ rsyslog \ zabbix

rsyslog \ фильтры \ источники \ прием \ отправка \ настройка

Приоритет:

Rsyslog фильтрует сообщения для дальнейшего управления. 
Используются следующие фильтры:
facility and priority (Источники и приоритеты) -> Фильтры свойств -> Фильтры основанные на выражениях

Категории источники:

auht/authpriv - сообщения процессов аутентификации;
cron - логи имеющие отношения к планировщику;
daemon - логи запущенных демонов (сервисов);
kernel - логи ядра;
mail - логи почты;
syslog - логи имеющике отношение к syslog и другим сервисам;
lpr - логи печати;
local0-local7 - выделенные для административных целей.

Приоритеты:

Priority (Приоритеты) - уровень приоритетности (важности) сообщений
emerg (0) - экстренные;
alert (1) - тревожные;
err (3) - ошибки;
warn (4) - предупреждения;
notice (5) - уведомления;
info (6) - информация;
debug (7) - наивысший уровень (отладка)

Примеры использования фильтров:

Все лог сообщения сгенерированные подсистемой ядра с любым уровнем важности записывать в файл /var/log/kernel.log
kern.* /var/kernel.log

Отбрасывает все лог сообщения и прекращает их обработку.
*.* ~

Фильтровать и записывать в файл все лог сообщения от источника "daemon" с уровнем важности "err"
daemon.err /var/log/error_daemo.log

Фильтры базирующиеся на свойствах:

Синтаксис
:property, [!]compare-operation, "value"

Операторы сравнения:
contains - проверяет содержится ли строка, представленная в значении, в свойстве;
isequal - проверяет значение и свойство, они должные быть полностью идентичны;
startswith - проверяет находится ли значение в "value" в начале свойства;
regex - сравнение с помощью регулярных выражений;
ereregex - использование расширенных регулярных выражений;
isempty - является ли свойство пустым (не имеющим значения).
Наиболее полезные типы свойств:

msg - тело сообщения;
hostname - имя хоста отправившего сообщение;
source - алиас hostname;
fromhost - имя хоста от которого было полученно сообщение (если имя удалось разрешить);
fromhost-ip - тоже самое, что и fromhost только всегда ip-адрес;
syslogtag - TAG сообщения;
programname - имя программы;
syslogfacility - источник лог сообщения в форме цифры;
syslogfacility-text - источник лог сообщения в текстовой форме;
syslogseverity - уровень важности в цифровом виде;
syslogseverity-text - уровень важности в текстовом виде;
pri - источник и приоритет в виде числа;
pri-text - источник и приоритет в текстовом формате;
timegenerated - время когда сообщение было полученно.

Примеры использования фильтров базирующиеся на свойствах:

Если в теле сообщения встречается данный текст "DHCPREQUEST(lxdbr0)", то записывать сообщение в файл /var/log/syslog
:msg, contains, "DHCPREQUEST(lxdbr0)" /var/log/syslog

Если ip-адрес [хоста от которого полученно сообщение "192.168.1.1", то записать сообщение в файл /var/log/router.log
:fromhost-ip, isequal, "192.168.1.1" /var/log/router.log

Если имя хоста содержит текст "ubuntu", то записать его в файл /var/log/ubuntu-servers.log
:fromhost, regex ".*ubuntu.*" /var/log/ubuntu-servers.log

Фильтры основанные на выражениях:

Синтаксис:
if EXPRESSION then ACTION else ACTION

Примеры:
Если facility равно "local1" и cообщение содержит "mysql" то записывать его в файл /var/log/db.log
if $syslogfacility-text == "local1" and $msg contains "mysql"
then  /var/log/db.log 

Если сообщение содержит в себе текст "666" то записать его в файл "/var/log/666.log", если нет содержит то записать в файл "/var/log/non_666.log"
if $msg contains "666" then { action(type="omfile" file="/var/log/666.log") } 
else { action(type="omfile" file="/var/log/non_666.log") }

Пример фильтра не пишем лог

#no logging
:msg, contains, "YOU_TEXT_MESSAGE_1" stop
:msg, contains, "YOU_TEXT_MESSAGE_2" stop
:msg, contains, "YOU_TEXT_MESSAGE_3" stop
:msg, contains, "YOU_TEXT_MESSAGE_4" stop

#sent log to loanalyzer 
*.* @@172.17.1.100

Шаблоны

Шаблоны можно использовать для динамической генерации имен лог файлов

Синтаксис:
$template имя_шаблона, опции

Примеры:

$template remote_logs,"/var/log/%HOSTNAME%/%PROGRAMNAME%.log"
daemon.* ?remote_logs

Сначала задаем шаблон с именем "remote_logs" потом указываем что запись лог сообщений необходимо вести в файл "/var/log/%HOSTNAME%/%PROGRAMNAME%.log", 
где %HOSTNAME% и %PROGRAMNAME% это свойства, грубо говоря переменные, которые зависят от источника лог сообщений. 
Потом с помощью знака ? и имени шаблона указываем, привязываем шаблон к фильтру сообщений. 
Получаем, что сообщения с источником сервисов писать в лог файл с названием как у службы и находящийся в директории с именем как у соответствующего хоста.

Прием логов:

Rsyslog сервер можно настроить на прием лог сообщений от других хостов. 
Для этого необходимо внести изменения в конфигурационный файл /etc/rsyslog.conf

Для работы по протоколу UDP:
module(load="imudp")
input(type="imudp" port="514")

Для работы по протоколу TCP:
module(load="imtcp")
input(type="imtcp" port="514")

Возможно работа одновременного по обоим протоколам.
После перезапуска сервер сможет принимать логи от удаленных хостов и обрабатывать их согласно настроенным фильтрам.

Отправка логов на удаленный Rsyslog сервер:

Для отправки логов на другой сервер необходимо вместо лог файла указать конструкцию с @ или @@ и ip-адрес сервера и порт:

Отправлять все логи на 172.20.1.58 по протоколу UDP
*.* @172.20.1.58:514

Отправлять все логи на 172.20.1.58 по протоколу TCP
*.* @@172.20.1.58:514



Рубрики
syslog \ rsyslog \ zabbix

rsyslog \ фильтруем лишнее \ :msg \ contains \ stop

#no logging
:msg, contains, "YOU_TEXT_MESSAGE_1" stop
:msg, contains, "YOU_TEXT_MESSAGE_2" stop
:msg, contains, "YOU_TEXT_MESSAGE_3" stop
:msg, contains, "YOU_TEXT_MESSAGE_4" stop

#sent log to loanalyzer 
*.* @@172.17.1.100

Рубрики
syslog \ rsyslog \ zabbix

zabbix api \ python \ получение данных из zabbix \ создание host\item\trigger в zabbix

Ссылки:

https://www.zabbix.com/documentation/current/manual/api/changes_5.2_-_5.4

https://www.zabbix.com/ru/zabbix_api
https://www.zabbix.com/documentation/current/ru/manual/api
https://www.zabbix.com/documentation/current/ru/manual/api/reference/host/get
https://www.zabbix.com/documentation/current/ru/manual/api/reference
https://www.zabbix.com/documentation/current/ru/manual/api/reference/trigger
https://www.zabbix.com/documentation/current/ru/manual/api/reference/trigger/get
https://www.zabbix.com/documentation/current/ru/manual/web_interface/frontend_sections/monitoring/problems
https://www.zabbix.com/documentation/current/ru/manual/api/reference/problem/get
https://www.zabbix.com/documentation/current/manual/api/reference/problem/get
https://www.zabbix.com/documentation/current/ru/manual/api/reference/event/get


https://pypi.org/project/py-zabbix/
https://github.com/adubkov/py-zabbix
https://py-zabbix.readthedocs.io/en/latest/api.html
https://habr.com/ru/post/325876/
https://catonrug.blogspot.com/2018/07/learning-python-because-of-zabbix-api.html
Getting started with Zabbix API
https://www.jsonrpc.org/specification https://www.json.org/json-en.html

Python, JSON со структурой

{
      'host': 'Hostname'
      'groups': [...]
      'interfaces': [{},{},{}]
      'inventory': {}
      'templates': [{},{},{}]
      'inventory_mode': '1'
      'proxy_hostid': 'INT'
      'status': '0'
}

[] - массив \ список
{} - словарь


Python настройка подключения к серверу zabbix:

from pyzabbix.api import ZabbixAPI

# Переменные
ZABBIXURL = 'http://URL/zabbix/'
ZABBIXAPIUSER = 'USER '
ZABBIXAPIPASSWORD = 'PASSWORD'

# Создаем инстанс zapi
# Будем применять для дальнейших операций 
zapi = ZabbixAPI(url=ZABBIXURL, user=ZABBIXAPIUSER, password=ZABBIXAPIPASSWORD)

# Завершаем подключения 
zapi.user.logout()

Пример №1 Печатаем список хостов

from pyzabbix.api import ZabbixAPI

# Переменные
ZABBIXURL = 'http://URL/zabbix/'
ZABBIXAPIUSER = 'USER'
ZABBIXAPIPASSWORD = 'PASSWORD'

# Создаем инстанс zapi
# Будем применять для дальнейших операций 
zapi = ZabbixAPI(url=ZABBIXURL, user=ZABBIXAPIUSER, password=ZABBIXAPIPASSWORD)

# Добываем информацию узлы
# monitored_host - "флаг" - Возврат узлов сети только под наблюдением.
result1 = zapi.host.get(monitored_hosts=1, output='extend')

# Формируем список
hostnames1 = [host['host'] for host in result1]
# Если нужно можем распечатать список
# print(hostnames1)
# Печатаем список хостов красиво
for i in hostnames1:
     print(i)

# Завершаем подключения 
zapi.user.logout()

Пример №2 Печатаем список хостов

from pyzabbix.api import ZabbixAPI

# Переменные
ZABBIXURL = 'http://URL/zabbix/'
ZABBIXAPIUSER = 'USER'
ZABBIXAPIPASSWORD = 'PASSWORD'

# Создаем инстанс zapi
# Будем применять для дальнейших операций 
zapi = ZabbixAPI(url=ZABBIXURL, user=ZABBIXAPIUSER, password=ZABBIXAPIPASSWORD)

#Печатаем список узлов пример 1
for host in zapi.host.get(output = ['hostid','host','name'],  selectInterfaces=['ip','port','dns']):
    print (host)
  
#Печатаем список узлов пример 2
host_and_ip = zapi.host.get(output = ['hostid','host','name'],  selectInterfaces=['ip','port','dns'])
for i in host_and_ip:
   # print(i)
    print(i['host'], i['name'], i['interfaces'])

# Завершаем подключения 
zapi.user.logout()

Пример №3 Печатаем список групп

from pyzabbix.api import ZabbixAPI

# Переменные
ZABBIXURL = 'http://URL/zabbix/'
ZABBIXAPIUSER = 'USER'
ZABBIXAPIPASSWORD = 'PASSWORD'

# Создаем инстанс zapi
# Будем применять для дальнейших операций 
zapi = ZabbixAPI(url=ZABBIXURL, user=ZABBIXAPIUSER, password=ZABBIXAPIPASSWORD)


print(f" \nПечатаем список групп:")
groups = zapi.hostgroup.get(output=['itemid','name'])
for group in groups:
        print (group['groupid'],group['name'])


# Завершаем подключения 
zapi.user.logout()

Пример №4 Печатаем список хостов из группы

from pyzabbix.api import ZabbixAPI

# Переменные
ZABBIXURL = 'http://URL/zabbix/'
ZABBIXAPIUSER = 'USER'
ZABBIXAPIPASSWORD = 'PASSWORD'

# Создаем инстанс zapi
# Будем применять для дальнейших операций 
zapi = ZabbixAPI(url=ZABBIXURL, user=ZABBIXAPIUSER, password=ZABBIXAPIPASSWORD)


print(f" \nПечатаем список групп:")
groups = zapi.hostgroup.get(output=['itemid','name'])
for group in groups:
        print (group['groupid'],group['name'])

print(f" \nПолучаем список хостов в группе с id 2")
hosts = zapi.host.get(groupids=2, output=['hostid','name'])
for host in hosts:
        print (host['hostid'],host['name'])

# Завершаем подключения 
zapi.user.logout()

Пример №5 Печатаем список item

from pyzabbix.api import ZabbixAPI

# Переменные
ZABBIXURL = 'http://URL/zabbix/'
ZABBIXAPIUSER = 'USER '
ZABBIXAPIPASSWORD = 'PASSWORD'

# Создаем инстанс zapi
# Будем применять для дальнейших операций 
zapi = ZabbixAPI(url=ZABBIXURL, user=ZABBIXAPIUSER, password=ZABBIXAPIPASSWORD)

#Получаем список item с хоста c id 10268
print(f" \nПолучаем список item с хоста c id 10268")
items = zapi.item.get(hostids=10268, output=['itemid','name'])
for item in items:
        print (item['itemid'],item['name'])

# Завершаем подключения 
zapi.user.logout()

Пример №6 Печатаем triggers

from pyzabbix.api import ZabbixAPI

# Переменные
ZABBIXURL = 'http://URL/zabbix/'
ZABBIXAPIUSER = 'USER'
ZABBIXAPIPASSWORD = 'PASSWORD'

# Создаем инстанс zapi
# Будем применять для дальнейших операций 
zapi = ZabbixAPI(url=ZABBIXURL, user=ZABBIXAPIUSER, password=ZABBIXAPIPASSWORD)

# Получить список всех проблем (триггеры сработали)
triggers = zapi.trigger.get(only_true=1,
                            skipDependent=1,
                            monitored=1,
                            active=1,
                            output='extend',
                            expandDescription=1,
                            selectHosts=['host'],
                            )

# Получить список какие проблемы не подтверждены.
unack_triggers = zapi.trigger.get(only_true=1,
                                  skipDependent=1,
                                  monitored=1,
                                  active=1,
                                  output='extend',
                                  expandDescription=1,
                                  selectHosts=['host'],
                                  withLastEventUnacknowledged=1,
                                  )


unack_trigger_ids = [t['triggerid'] for t in unack_triggers]
for t in triggers:
    t['unacknowledged'] = True if t['triggerid'] in unack_trigger_ids \
        else False

# Распечатать список, содержащий только "сработавшие" триггеры
print (f"\n печатаем триггеры")
for t in triggers:
    if int(t['value']) == 1:
        print("{0} - {1} {2}".format(t['hosts'][0]['host'],
                                     t['description'],
                                     '(Unack)' if t['unacknowledged'] else '')
              )


# Завершаем подключения 
zapi.user.logout()

Пример №7 Печатаем все triggers которые сработали у группы хостов

from datetime import datetime
from pyzabbix.api import ZabbixAPI

# Переменные
ZABBIXURL = 'http://URL/zabbix/'
ZABBIXAPIUSER = 'USER'
ZABBIXAPIPASSWORD = 'PASSWORD'

# Создаем инстанс zapi
# Будем применять для дальнейших операций 
zapi = ZabbixAPI(url=ZABBIXURL, user=ZABBIXAPIUSER, password=ZABBIXAPIPASSWORD)


#Печатаем список групп
print(f" \nПечатаем список групп:")
groups = zapi.hostgroup.get(output=['itemid','name'])
for group in groups:
        print (group['groupid'],group['name'])

# Получаем триггеры группы узлов с groupids = 2
triggers = zapi.trigger.get(groupids=2, output='extend', expandDescription=1, selectHosts=['host'],)

#print(f"\n Печатаем все триггеры groupids2 {triggers}")

print("\n")

# Печатаем триггеры
for t in triggers:
    print("{0} - {1} - {2}".format(t['hosts'][0]['host'], t['description'], datetime.utcfromtimestamp(int(t['lastchange'])).strftime('%Y-%m-%d %H:%M:%S')))

# Завершаем подключения 
zapi.user.logout()

Пример №8 Печатаем проблемы

###!!!! из доков Для получения проблем, которые были решены ранее, используйте event.get метод.
from datetime import datetime
from pyzabbix.api import ZabbixAPI

# Переменные
ZABBIXURL = 'http://URL/zabbix/'
ZABBIXAPIUSER = 'USER'
ZABBIXAPIPASSWORD = 'PASSWORD'

# Создаем инстанс zapi
# Будем применять для дальнейших операций 
zapi = ZabbixAPI(url=ZABBIXURL, user=ZABBIXAPIUSER, password=ZABBIXAPIPASSWORD)

## Получаем все проблемы по хосту hsrv1_factoria
## !!! На самом деле не все!!! из доков Для получения проблем, которые были решены ранее, используйте event.get метод.
problem = zapi.problem.get(host='hsrv1_factoria', recent='true')

##print("\n", problem)
for pr in problem:
   #print("{0} - {1} - {2} ".format(pr['eventid'], pr['name'], pr['clock']))
   print("{0} - {1} - {2} ".format(pr['eventid'], pr['name'], datetime.utcfromtimestamp(int(pr['clock'])).strftime('%Y-%m-%d %H:%M:%S')))


# Завершаем подключения 
zapi.user.logout()

Пример №9 Печатаем все проблемы (history.get)

from datetime import datetime
from pyzabbix.api import ZabbixAPI

# Переменные
ZABBIXURL = 'http://URL/zabbix/'
ZABBIXAPIUSER = 'USER'
ZABBIXAPIPASSWORD = 'PASSWORD'

# Создаем инстанс zapi
# Будем применять для дальнейших операций 
zapi = ZabbixAPI(url=ZABBIXURL, user=ZABBIXAPIUSER, password=ZABBIXAPIPASSWORD)

#Zabbix ведет время от создания linux
#Для уточнения времени исполняем стандартную команду linux
#date -d @1620925819
#date +%s

# Получаем все проблемы для группы хостов groupids=2 начиная с даты 1620925819 (Чт 13 мая 2021 20:10:19 MSK)
problem = zapi.event.get(groupids=2,time_from=1620925819)
## Может пригодится для уточнения объектов
##print("\n", problem)

for pr in problem:
    print("{0} - {1} - {2} ".format(pr['eventid'], pr['name'], datetime.utcfromtimestamp(int(pr['clock'])).strftime('%Y-%m-%d %H:%M:%S')))


# Завершаем подключения 
zapi.user.logout()

Пример №10 Печатаем все проблемы (history.get) и сохраняем в файл out.csv

from contextlib import redirect_stdout
from datetime import datetime
from pyzabbix.api import ZabbixAPI
# Переменные
ZABBIXURL = 'http://URL/zabbix/'
ZABBIXAPIUSER = 'USER'
ZABBIXAPIPASSWORD = 'PASSWORD'

# Создаем инстанс zapi
# Будем применять для дальнейших операций 
zapi = ZabbixAPI(url=ZABBIXURL, user=ZABBIXAPIUSER, password=ZABBIXAPIPASSWORD)

#Zabbix ведет время от создания linux
#Для уточнения времени исполняем стандартную команду linux
#date -d @1620925819
#date +%s

# Получаем все проблемы для группы хостов groupids=2 начиная с даты 1620925819 (Чт 13 мая 2021 20:10:19 MSK)
problem = zapi.event.get(groupids=2,time_from=1620925819)
## Может пригодится для уточнения объектов
##print("\n", problem)

#Запись CSV файла
with open('out.csv', 'w', encoding='utf_8') as f:
    with redirect_stdout(f):
        for pr in problem:
            print("{0};{1};{2} ".format(pr['eventid'], pr['name'], datetime.utcfromtimestamp(int(pr['clock'])).strftime('%Y-%m-%d %H:%M:%S')))


# Завершаем подключения 
zapi.user.logout()

Пример №11 Создаем узлы (do_request)

from pyzabbix.api import ZabbixAPI

# Переменные
ZABBIXURL = 'http://URL/zabbix/'
ZABBIXAPIUSER = 'USER'
ZABBIXAPIPASSWORD = 'PASSWORD'

# Создаем инстанс zapi
# Будем применять для дальнейших операций 
zapi = ZabbixAPI(url=ZABBIXURL, user=ZABBIXAPIUSER, password=ZABBIXAPIPASSWORD)

#Печатаем все группы узлов
print(f" \nПечатаем список групп:")
groups = zapi.hostgroup.get(output=['itemid','name'])
for group in groups:
        print (group['groupid'],group['name'])



#Список ид teplate и имя teplate
teplates = zapi.template.get(with_items=1)

# для теста вывалить все в teplates
#print(teplates)

for i in teplates:
    print(i['templateid'], i['host'])

# Создаем узел blablalbalba1 c "ip": "8.8.8.9" в группе с id 5 
zapi.do_request(method="host.create",params={
        "host": "blablalbalba1",
        "interfaces": [
            {
                "type": 1,
                "main": 1,
                "useip": 1,
                "ip": "8.8.8.9",
                "dns": "",
                "port": "10050"
            }
        ],
        "groups": [
            {
                "groupid": "5"
            }
        ],
        "templates": [
            {
                "templateid": "10001"
            }
        ],
    }
)

# Проверяем
print(f" \nПолучаем список хостов в группе с id 5")
hosts = zapi.host.get(groupids=5, output=['hostid','name'])
for host in hosts:
        print (host['hostid'],host['name'])



# Завершаем подключения 
zapi.user.logout()

Пример №12 Создаем элемент данных (do_request)

from pyzabbix.api import ZabbixAPI, ZabbixAPIException
import sys

# Переменные
ZABBIXURL = 'http://URL/zabbix/'
ZABBIXAPIUSER = 'USER'
ZABBIXAPIPASSWORD = 'PASSWORD'

# Создаем инстанс zapi
# Будем применять для дальнейших операций 
zapi = ZabbixAPI(url=ZABBIXURL, user=ZABBIXAPIUSER, password=ZABBIXAPIPASSWORD)

#Печатаем все группы узлов
print(f" \nПечатаем список групп:")
groups = zapi.hostgroup.get(output=['itemid','name'])
for group in groups:
        print (group['groupid'],group['name'])

#Получаем список хостов в группе 5
print(f" \nПолучаем список хостов в группе с id 5:")
hosts = zapi.host.get(groupids=5, output=['hostid','name'])
for host in hosts:
        print (host['hostid'],host['name'])



host_name = 'blablalbalba1'

hosts = zapi.host.get(filter={"host": host_name}, selectInterfaces=["interfaceid"])
if hosts:
    host_id = hosts[0]["hostid"]
    print("\nНайден host id {0}".format(host_id))

    try:
        item = zapi.item.create(
            hostid=host_id,
            name='Used disk space on $1 in %',
            key_='vfs.fs.size[/,pused]',
            type=0,
            value_type=3,
            interfaceid=hosts[0]["interfaces"][0]["interfaceid"],
            delay=30
        )

    except ZabbixAPIException as e:
        print(e)
        sys.exit()

    print("Добавили item для itemid {0} на host: {1}".format(item["itemids"][0], host_name))
else:
    print(f"\nХост {host_name} не обнаружен.")



# Завершаем подключения 
zapi.user.logout()

Пример №13 Создаем триггер (do_request)

from pyzabbix.api import ZabbixAPI, ZabbixAPIException
import sys


# Переменные
ZABBIXURL = 'http://URL/zabbix/'
ZABBIXAPIUSER = 'USER'
ZABBIXAPIPASSWORD = 'PASSWORD'

# Создаем инстанс zapi
# Будем применять для дальнейших операций 
zapi = ZabbixAPI(url=ZABBIXURL, user=ZABBIXAPIUSER, password=ZABBIXAPIPASSWORD)



#Печатаем все группы узлов
print(f" \nПечатаем список групп:")
groups = zapi.hostgroup.get(output=['itemid','name'])
for group in groups:
        print (group['groupid'],group['name'])

#Получаем список хостов в группе 5
print(f" \nПолучаем список хостов в группе с id 5:")
hosts = zapi.host.get(groupids=5, output=['hostid','name'])
for host in hosts:
        print (host['hostid'],host['name'])


#Куда и что будем добавлять
host_name = 'blablalbalba1'
trg1="xxx1 {HOST.NAME}"
exp1="last(/blablalbalba1/1111vfs.fs.size[/,pused])=0"
pri1="4"

hosts = zapi.host.get(filter={"host": host_name}, selectInterfaces=["interfaceid"])

if hosts:
    host_id = hosts[0]["hostid"]
    print("\nНайден host id {0}".format(host_id))

    try:
        item = zapi.trigger.create(description=trg1, expression=exp1, priority=pri1)

    except ZabbixAPIException as e:
        print(e)
        sys.exit()

    print("Добавили trigger для {0}".format(host_name))
else:
    print(f"\nХост {host_name} не обнаружен.")


# Завершаем подключения 
zapi.user.logout()

Рубрики
syslog \ rsyslog \ zabbix

zabbix upgrade 5.0 to 5.4 \ CentOS8

Ссылка:

https://www.zabbix.com/documentation/current/manual/installation/upgrade/packages/rhel_centos

Процесс:

0. Обновляем пакеты
yum update -y

1. Останавливаем zabbix
systemctl stop zabbix-server
systemctl stop zabbix-proxy
systemctl stop zabbix-agent

2. Обновляем  и устанавливаем репозиторий
rpm -Uvh https://repo.zabbix.com/zabbix/5.4/rhel/8/x86_64/zabbix-release-5.4-1.el8.noarch.rpm

3. Выполняем upgrade пакетов zabbix
yum upgrade zabbix-server-mysql zabbix-web-mysql zabbix-agent

4. Стартуем zabbix
systemctl start zabbix-server
systemctl start zabbix-agent
systemctl start zabbix-agent

5. Проверяем лог и дожидаемся обновления:
tail /var/log/zabbix/zabbix_server.log

6. После завершения обновления проверяем работу zabbix
Рубрики
syslog \ rsyslog \ zabbix

update zabbix 4.2 to 5 centos 8 \ debian 11

Ссылки:


Upgrade Zabbix (5.0, 5.2, 5.4) to 6.0 like a Pro [+6.0 to 6.4 guide]
https://serveradmin.ru/obnovlenie-zabbix-4-4-do-5-0/ https://serveradmin.ru/ustanovka-i-nastrojka-zabbix-5-0/
Исправляем ошибку MySQL «Row size too large» в 1с-Битрикс
https://www.zabbix.com/documentation/5.0/manual/installation/upgrade_notes_500 https://www.zabbix.com/documentation/2.0/ru/manual/installation/upgrade https://www.tyler-wright.com/zabbix34to40-error-events-table/ https://mariadb.com/kb/en/troubleshooting-row-size-too-large-errors-with-innodb/ http://mithrandir.ru/professional/databases/mysql-row-size-too-large.html https://www.google.com/ "The Zabbix database version does not match current requirements. Your database version: 4030046. Required version: 5000000. Please contact your system administrator." "zabbix 5 как обновить базу вручную" "Row size too large. The maximum row size for the used table type, not counting BLOBs, is 8126. This includes storage overhead, check the manual." The maximum row size for the used table type, not counting BLOBs, is 8126. "Row size too large?"

Backup zabbix

0. выключаем zabbix-server
systemctl stop zabbix-server

1. создаем папки для бэкапа
mkdir -p /opt/zabbix_backup/bin_files /opt/zabbix_backup/conf_files /opt/zabbix_backup/doc_files
mkdir -p /opt/zabbix_backup/web_files /opt/zabbix_backup/db_files

2. Бэкпим web файлы
cp -rp /usr/share/zabbix/ /opt/zabbix_backup/web_files

3. Бэкапим databases mysql
mysqldump -h localhost -u'root' -p'rootDBpass' --single-transaction 'zabbix' | gzip > /opt/zabbix_backup/db_files/zabbix_backup.sql.gz

Update zabbix debian stage 1

0. сносим zabbix-release
dpkg --purge zabbix-release

1. update
sudo wget https://repo.zabbix.com/zabbix/5.0/debian/pool/main/z/zabbix-release/zabbix-release_5.0-1+$(lsb_release -sc)_all.deb
sudo dpkg -i zabbix-release_5.0-1+$(lsb_release -sc)_all.deb
apt update
apt install -y --only-upgrade zabbix-server-mysql zabbix-frontend-php 

2.ставим zabbix-apache-conf
apt-get install -y zabbix-apache-conf


Update zabbix ubuntu stage 1

0. сносим zabbix-release
dpkg --purge zabbix-release

1. update
wget https://repo.zabbix.com/zabbix/5.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_5.0-1+$(lsb_release -sc)_all.deb
dpkg -i zabbix-release_5.0-1+$(lsb_release -sc)_all.deb
apt update
apt install -y --only-upgrade zabbix-server-mysql zabbix-frontend-php

2. ставим zabbix-apache-conf
apt-get install -y zabbix-apache-conf

Update zabbix Centos stage 1

rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/$(rpm -E %{rhel})/x86_64/zabbix-release-5.0-1.el$(rpm -E %{rhel}).noarch.rpm
dnf clean all
dnf upgrade -y zabbix-server-mysql zabbix-web-mysql 
dnf install -y zabbix-apache-conf

Zabbix update stage 2

!!! При запуске zabbix начнется процесс обновления базы данных 
0. Запускаем zabbix-server
systemctl start zabbix-server

1. Наблюдаем за логами zabbix
cat /var/log/zabbix/zabbix_server.log | grep database

2. Очищаем кеш браузера и подключаемся к zabbix

3. Проверяем версию zabbix 
zabbix_server -V

Проверка databases mysql

mysql -u'zabbix' -p'zabbixDBpass' zabbix -e "show create table history;" 

| history | CREATE TABLE history (
itemid bigint(20) unsigned NOT NULL,
clock int(11) NOT NULL DEFAULT '0',
value double(16,4) NOT NULL DEFAULT '0.0000',
ns int(11) NOT NULL DEFAULT '0',
KEY history_1 (itemid,clock)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin |

apply it PostGreSql users need to change “mysql” with “postgresql” in the URL path:

!!! Применяется после обновления с postgres на mysql
wget https://git.zabbix.com/projects/ZBX/repos/zabbix/raw/database/mysql/double.sql
mysql -u'zabbix' -p'zabbixDBpass' zabbix < double.sql

Проверка базы данных zabbix mysql

mysql -u'zabbix' -p'zabbixDBpass' zabbix -e "show create table history;"
history | 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 |

Убрать предупреждения базы данных

Now we need to add the line bellow to “zabbix.conf.php” with the text editor to remove warning message from the frontend.

nano /etc/zabbix/web/zabbix.conf.php
------------------------------------
$DB['DOUBLE_IEEE754'] = 'true';
------------------------------------

Не запускается zabbix-server №1

!!! в логах ошибки
0. проверяем
cat /var/log/zabbix/zabbix_server.log | grep database
------------------------------------------------------
1331:20200727:174531.353 current database version (mandatory/optional): 05000000/05000001
1331:20200727:174531.389 database is not upgraded to use double precision values
Duplicate column name 'name' [alter table `events` add `name` varchar(2048) default '' not null]
------------------------------------------------------

1. Как вариант можно удалить дублирующую строку
mysql -u zabbix-user -p
USE zabbix-db-name;
ALTER TABLE events DROP COLUMN name;
exit

2. Пытаемся запустить zabbix и проверяем логи
systemctl start zabbix-server
cat /var/log/zabbix/zabbix_server.log | grep database

Не запускается zabbix-server №2

0. проверяем логи
cat /var/log/zabbix/zabbix_server.log | grep database
----------------------------------------
ERROR 1118 (42000): Row size too large (> 8126). 
Changing some columns to TEXT or BLOB may help.
In current row format, BLOB prefix of 0 bytes is stored inline.
----------------------------------------
[Warning] InnoDB: Cannot add field col in table db1.tab because after adding it, 
the row size is 8478 which is greater than maximum allowed size (8126) for a 
record on index leaf page.
----------------------------------------

1. Можно изменить формат таблицы
mysql -u zabbix-user -p
USE zabbix-db-name;
ALTER TABLE ИМЯ_Таблицы ROW_FORMAT=DYNAMIC;
exit

2. Пытаемся запустить zabbix и проверяем логи
systemctl start zabbix-server
cat /var/log/zabbix/zabbix_server.log | grep database

Пример:
mysql -u zabbix-user -p
USE zabbix-db-name;
ALTER TABLE tableName ENGINE = InnoDB ROW_FORMAT = Dynamic;
exit

Рубрики
syslog \ rsyslog \ zabbix

rsyslog \ перенаправляем лог из файла на удаленный сервер \ imfile

vim /etc/rsyslog.conf

#!!! Добавляем

# zimbra audit log
$ModLoad imfile
$InputFileName /opt/zimbra/log/audit.log # путь до лога за которым наблюдаем (права на чтение должны быть выданы)
$InputFileStateFile zimbra # произвольное имя
$InputFileTag zimbra: # произвольное имя метки
$InputFileFacility local3 # желаемое имя Facility 
$InputFileSeverity info # желаемое имя Severity
$InputRunFileMonitor # необходимая опция для наблюдения за файлом 

local3.info @@192.168.1.165
Рубрики
syslog \ rsyslog \ zabbix

Install zabbix 5 in debian 10

Ссылки:

https://www.zabbix.com/download?zabbix=5.0&os_distribution=debian&os_version=10_buster&db=mysql&ws=apache - инструкция по установки zabbix
https://www.digitalocean.com/community/tutorials/how-to-install-mariadb-on-debian-10 - инструкция по mariadb и паролю root
https://wiki.debian.org/Zabbix

Установка:

!!! Не забудь изменить пароли на свои

0. Добавим репозиторий

# wget https://repo.zabbix.com/zabbix/5.0/debian/pool/main/z/zabbix-release/zabbix-release_5.0-1+buster_all.deb
# dpkg -i zabbix-release_5.0-1+buster_all.deb
# apt update

1. Ставим пакеты
apt install zabbix-server-mysql zabbix-frontend-php zabbix-apache-conf zabbix-agent

2. Ставим mariadb
sudo apt install mariadb-server
sudo mysql_secure_installation

3. Создаем пользователя и бузу zabbix в mariadb
!!! измени пароль 'password'
mysql -uroot -p
mysql> create database zabbix character set utf8 collate utf8_bin;
mysql> create user zabbix@localhost identified by 'password';
mysql> grant all privileges on zabbix.* to zabbix@localhost;
mysql> quit;

4. Заливаем базу:
zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix

5. Редактируем файл zabbix_server.conf и прописываем наш пароль для db:
vim /etc/zabbix/zabbix_server.conf
------------------------------
DBPassword=password
------------------------------

6. Редактируем временную зону в файле /etc/zabbix/apache.conf:
vim /etc/zabbix/apache.conf
---------------------------
# ищем это php_value date.timezone Europe/Riga
php_value date.timezone Europe/Moscow
---------------------------

7. Перезапускаем zabbix и apache2
systemctl restart zabbix-server zabbix-agent apache2

8. Добавляем zabbix и apache2 в автозагрузку
systemctl enable zabbix-server zabbix-agent apache2

Подключение:

!!! При первом подключении к zabbix нужно будет завершить установку.
!!! Возможно zabbix не сможет записать в файл zabbix.conf.php
!!! Находится тут /usr/share/zabbix/conf/zabbix.conf.php
!!! Zabbix предложит скачать файл и сохранить его вручную.

default url:
http://server_ip_or_name/zabbix

default login:
Admin

default pass:
zabbix

Рубрики
syslog \ rsyslog \ zabbix Конспект

Конспект: zabbix

Установка zabbix-server

!!! можно воспользоваться официальной инструкцией 
!!! https://www.zabbix.com/ru/download?zabbix=5.4&os_distribution=debian&os_version=11_bullseye&db=mysql&ws=apache 

0. устанавливаем пакет
apt install zabbix-server-mysql

1. Создаем файл zabbix.sql
nano zabbix.sql
---------------
#drop database zabbix;
create database zabbix character set utf8 collate utf8_bin;
grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix';
---------------

2. Создаем базу
mysql < zabbix.sql

3. Загружаем таблицы
zcat /usr/share/zabbix-server-mysql/schema.sql.gz | mysql -uzabbix -pzabbix zabbix  
zcat /usr/share/zabbix-server-mysql/images.sql.gz | mysql -uzabbix -pzabbix zabbix
zcat /usr/share/zabbix-server-mysql/data.sql.gz | mysql -uzabbix -pzabbix zabbix

3. Редактируем конфигурацию сервера zabbix
nano /etc/zabbix/zabbix_server.conf
Можно просто вставить в самый конец файла.
-----------------------------------
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix
-----------------------------------

4. Запускаем zabbix
systemctl enable zabbix-server
service zabbix-server start

Установка и запуск web интерфейса

0. Установка пакетов
apt install zabbix-frontend-php php-mysql

1. Редактируем файл и указываем правильную временную зону
/etc/apache2/conf-available/zabbix-frontend-php.conf
----------------------------------------------------
php_value date.timezone Europe/Moscow
----------------------------------------------------

2. Активируем конфиг и перезапускаем zabbix
a2enconf zabbix-frontend-php
service apache2 reload

3. Создаем пустой файл и выдаем на него права для apache2
touch /etc/zabbix/zabbix.conf.php
chown www-data /etc/zabbix/zabbix.conf.php

4. Заходим на веб интерфейс
http://ВАШ_IP_адрес/zabbix/setup.php

5. Проверяем конфиг
less /etc/zabbix/zabbix.conf.php
--------------------------------

Пароль по умолчанию

Логин: Admin
Пароль: zabbix

Что и как мониторит zabbix

Собственно мониторинг начинается тогда когда будет подключен хотя бы один item (Элемент данных)
Т.е. настроенный интерфейс в хосте ни на что не влияет.(почти)

Простые проверки

https://www.zabbix.com/documentation/4.0/ru/manual/config/items/itemtypes/simple_checks - док
Хост может не иметь не одного интерфейса zabbix, но можно выполнять простые проверки.

варианты:
net.tcp.service[http] 
net.tcp.service.perf[http,,8080]
net.tcp.service[ftp,,155]
net.udp.service.perf[ntp]
net.tcp.service.perf[http] - возвращает float (число с точкой)

Пример net.tcp.service.perf[http]
Создаем узел.
Имя узла сети: ya.ru
Группа: любая
Интерфейс любой: главное указать DNS (в нашем случае ya.ru)
Добавляем item (Элемент данных)
Имя: любое
Тип: Simple check(Простая проверка)
Тип информации: Float (Число с точкой)
Интервал обновления: желаемый (30s 10m 9h 300d)

Ну и собственно можем идти наблюдать в в мониторинге -> Последние данные

Также никто нам не запрещает создать узел и в варианте простой проверки указывать следующие:
icmpping[192.168.1.1] - возвращает dec (целое число) (0 - Fulse (не сработала), 1 - True(ок, сработала))
net.tcp.service[tcp,192.168.15.53,3389] - проверяем доступность порта 3389 (rdp) для хоста 192.168.15.53
То есть указывать хос\порт\протокол который мы проверяем, и одним узлом проверять множество узлов.





Триггеры

{ya.ru:net.tcp.service.perf[http].last()}=0
{server.corpX.un:icmpping[192.168.1.1].last()}=0
{server.corpX.un:net.tcp.service[tcp,192.168.15.53,3389].last()}=0

Можно настроить зависимость триггера, что бы он не срабатывал когда сработал другой триггер.
Например у нас есть два триггера. 
Один проверяет доступность интернета. 
Второй проверяет доступность сайта в интернете.
Логично будет что бы срабатывал только первый когда у нас не доступен интернет.


Так же можно вычислять среднее значение для срабатывания триггера 
{ya.ru:net.tcp.service.perf[https].avg(5m)}>0.4  

zabbix пассивное получение значений / элемент trapper

Настройка узла
--------------
Name: my item (как угодно)
Type: Zabbix trapper
Key: my.item
Allowed hosts: 127.0.0.1
---------------


zabbix_sender -z 127.0.0.1 -p 10051 -s server -k my.item -o 1

zabbix-agent минимальная конфигурация

zabbix_get -s IP/DNSNAME -p 10050 -k agent.version - тестирование подключения к zabbix-server с сервера zabbix
zabbix_agent -p - показать доступные  элементы

Zabbix-agent в обычном режиме
vim /etc/zabbix/zabbix-agentd.comf
----------------------------------
LogFile=/var/log/zabbix-agent/zabbix_agentd.log
LogFileSize=0
Server=IP_ADDRESS_SERVER_ZABBIX
#ServerActive=IP_ADDRESS_SERVER_ZABBIX 
Hostname=HOSTNAME_CLIENT_FOR_ZABBIX
Include=/etc/zabbix/zabbix_agentd.conf.d/
----------------------------------


Zabbix-agent в активном режиме
vim /etc/zabbix/zabbix-agentd.conf
!!! для этого режима требуется настраивать обнаружение (Настройка->Действия->Авто регистрация)
!!! в авто Дискавери не забудь прикрепить шаблон Zabbix agent (active), а иначе получишь неадекватные данные
----------------------------------

LogFile=/var/log/zabbix-agent/zabbix_agentd.log
LogFileSize=0
StartAgents=0          # Не слушаем сеть \ не ожидаем подключения заббикс сервера

#Server=192.168.15.246 # эта запись не нужна в активном режиме

ServerActive=192.168.15.246 # как раз этой записью сообщаем агенту что данные шлем сами

Hostname=HOSTNAME_CLIENT_FOR_ZABBIX # как наш агент будет представляется серверу заббикс

ListenIP=0.0.0.0 # не сообщаем свой IP адресс

Include=/etc/zabbix/zabbix_agentd.conf.d/

----------------------------------

Установка агента zabbix на CentOS7:

yum install -y zabbix-agent  - установка агента 
systemctl start zabbix-agent - запуск агента 
systemctl enable zabbix-agent - добавление в автозагрузку

nano /etc/zabbix/zabbix_agentd.conf - редактируем и исправляем строки
----------------------------------
StartAgents=2
Server=192.168.15.246 - ip нашего сервера zabbix
Hostname=sdv - имя клиента который подключается к zabbix
----------------------------------

service zabbix-agent stop - останавливаем агент
service zabbix-agent start - запускаем агент

Установка агента zabbix на debian:

apt update
apt upgrade
apt install zabbix-agent  - установка агента 
systemctl start zabbix-agent - запуск агента 
systemctl enable zabbix-agent - добавление в автозагрузку

nano /etc/zabbix/zabbix_agentd.conf - редактируем и исправляем строки
----------------------------------
StartAgents=2
Server=192.168.15.246 - ip нашего сервера zabbix
Hostname=sdv - имя клиента который подключается к zabbix
----------------------------------

service zabbix-agent stop - останавливаем агент
service zabbix-agent start - запускаем агент

Установка агента zabbix на windows:

0. Качаем agent zabbix для windows 
https://www.zabbix.com/download_agents#tab:34
1. Создаем папку zabbix на диске c:\

2. Распаковываем в нее 4 файла 
zabbix_agentd.exe
zabbix_agentd.win.conf
zabbix_get.exe
zabbix_sender.exe

3. редактируем файл zabbix_agentd.win.conf
------------------------------------------
Server = 192.168.15.246  - ip адрес Zabbix-севера 
Hostname = namehost - имя хоста, на который устанавливаем агент
HostnameItem = PC_NAME - имя хоста, на который устанавливаем агент
LogFile=c:\zabbix\zabbix_agentd.log - указываем место для записи логов в файл
------------------------------------------

4. Переходим в каталог на клиенте
cd c:\zabbix
5. Устанавливаем службу agent-zabbix
zabbix_agentd.exe -c c:\zabbix\zabbix_agentd.conf --install

6.Нужно создать разрешающее правило в Брандмауэре Windows.
Брандмауэр Защитника Windows – Дополнительные параметры – Правило для входящих подключений – Создать правило…

Тип правила: Для порта;
Протоколы и порты: Протокол TCP; Определенные локальные порты: 10050;
Действие: Разрешить подключение;
Профиль: Галочки Доменный, Частный, Публичный;
Имя: Zabbix Agent;

Zabbix-agent в обычном режиме + psk

== На клиенте ==
0. редактируем конфиг агента 
vim /etc/zabbix/zabbix-agentd.comf
----------------------------------
LogFile=/var/log/zabbix-agent/zabbix_agentd.log
LogFileSize=0
Server=IP_ADDRESS_SERVER_ZABBIX
Hostname=ClientZabbix
Include=/etc/zabbix/zabbix_agentd.conf.d/

TLSConnect=psk
TLSAccept=psk
##TLSAccept=unencrypted,psk
TLSPSKFile=/etc/zabbix/zabbix_agentd.psk
TLSPSKIdentity=ClientZabbix
----------------------------------

1.  Генерируем файл PSK  и распространяем его между агентами и сервером zabbix
openssl rand -hex 32 > /etc/zabbix/zabbix_agentd.psk - генерируем файл PSK 
scp /etc/zabbix/zabbix_agentd.psk server_zabbix:ClientZabbix.psk - копируем файл на server_zabbix
service zabbix-agent restart - перезапускаем агент

== На сервере ==
2. Проверяем
zabbix_get -s IP/DNSNAME -p 10050 -k agent.version - тестирование подключения к zabbix-server с сервера zabbix

zabbix_get -s ClientZabbix -p 10050 -k agent.version - проверяем без ключа
zabbix_get -s ClientZabbix -k system.sw.packages --tls-connect=psk --tls-psk-identity="ClientZabbix" --tls-psk-file=ClientZabbix.psk - тестируем с ключом 

3. В веб интерфейсе zabbix-server добавляем шифрование по PSK для узла ClientZabbix

Макросы

Макросы в zabbix, они же переменные. 
Макрос - перед макросам должен быть знак доллар ($) 
и все это заключено в фигурные скобки {}, пример:
{$SSH_PORT} 



UserParameter

Используется для написания своих ключей для zabbix-agent

vim /etc/zabbix/zabbix-agentd.comf - добавляем 
----------------------------------

#UnsafeUserParameters=1
#UserParameter=listinstalledsoft,powershell -Command Get-ChildItem HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall; powershell -Command Get-ChildItem HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall
#UserParameter=lmstat[*],C:\Progra~1\PTC\flexnet\bin\lmutil lmstat -a -c $1

#UserParameter=dir[*],dir $1
#UserParameter=runcommand[*],$1

UserParameter=bbb[*],wc -l $1 | cut -d' ' -f1
----------------------------------

service zabbix-agent restart - перезапускаем агент


Проверяем:

zabbix_get -s gate -k bbb[/etc/passwd]

sudo -u zabbix zabbix_agentd -t 'bbb[/etc/passwd]'

UserParameter пример с ssl (проверяем сколько жить сертификату сайта )

0.
!!! В zabbix_agentd.conf должен быть параметр (Include=/etc/zabbix/zabbix_agentd.d/*.conf)
vim /etc/zabbix/zabbix-agentd.comf
-----------------------------------------
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
Server=127.0.0.1,85.143.162.134
ServerActive=127.0.0.1
StartAgents=2
Hostname=Zabbix Server
Timeout=10
UnsafeUserParameters=0

Include=/etc/zabbix/zabbix_agentd.d/*.conf
------------------------------------------

1. В каталоге  (/etc/zabbix/zabbix_agentd.d/) файл ssl.conf
vim /etc/zabbix/zabbix_agentd.d/ssl.conf
------------------------------------------
UserParameter=ssl.discovery[*],/etc/zabbix/scripts/sslcheck/ssl_discovery.sh
UserParameter=ssl.expire[*],/etc/zabbix/scripts/sslcheck/ssl_check.sh $1
------------------------------------------

2.  в каталоге (/etc.zabbix.scripts/sslcheck/) файлы: 
list.txt - список доменов у которых проверяем ssl

vim ssl_check.sh - скрипт который проверяет валидность сертификата сайта 
---------------------------------------------
#!/bin/sh
SERVER=$1
TIMEOUT=25
RETVAL=0
TIMESTAMP=`echo | date`
if [ -z "$2" ]
then
PORT=443;
else
PORT=$2;
fi
EXPIRE_DATE=`echo | openssl s_client -connect $SERVER:$PORT -servername $SERVER 2>/dev/null | openssl x509 -noout -dates 2>/dev/null | grep notAfter | cut -d'=' -f2`
EXPIRE_SECS=`date -d "${EXPIRE_DATE}" +%s`
EXPIRE_TIME=$(( ${EXPIRE_SECS} - `date +%s` ))
if test $EXPIRE_TIME -lt 0
then
RETVAL=0
else
RETVAL=$(( ${EXPIRE_TIME} / 24 / 3600 ))
fi

echo ${RETVAL}
------------------------------------

vim ssl_discovery.sh - файл приводит список lixt.txt для читаемости zabbix
-----------------------------
#!/bin/bash
JSON=$(for i in `cat /etc/zabbix/scripts/sslcheck/list.txt`; do printf "{\"{#SSL}\":\"$i\"},"; done | sed 's/^\(.*\).$/\1/')
printf "{\"data\":["
printf "$JSON"
printf "]}"
-----------------------------


4. Тестирование 
root@zabbix-server:~# sudo -u zabbix zabbix_agentd -t 'ssl.discovery'
ssl.discovery                                 [t|{"data":[{"{#SSL}":"XXXXX.ru"},{"{#SSL}":"XXXXX.ru"},{"{#SSL}":"XXXXX.ru"},{"{#SSL}":"XXXXX.ru"}]}]

root@zabbix-server:~#  sudo -u zabbix zabbix_agentd -t 'ssl.expire[XXXXX.ru]'
ssl.expire[XXXXX.ru]          [t|400]

curl -Is https://XXXXX.ru | head -n 1

UserParameter пример с dhcp

0. Устанавливаем пакет 
apt install dhcpd-pools - устанавливаем пакет dhcpd-pools

1. Проверяем работу программы которая нам будет показывать сколько выдано у нас адресов
dhcpd-pools -l /var/lib/dhcp/dhcpd.leases -c /etc/dhcp/dhcpd.conf - покажет сколько адресов выдано 

2. создаем скрипт dhcp_stat.sh
vim  /etc/zabbix/scripts/dhcp_stat.sh (!!! все любят складывать скрипты /usr/local/bin/)
-------------------------------
#!/bin/sh

CMD='/usr/bin/dhcpd-pools -l /var/lib/dhcp/dhcpd.leases -c /etc/dhcp/dhcpd.conf -f c | grep 192.168.8'
MAX=`eval $CMD | cut -d'"' -f8`
CUR=`eval $CMD | cut -d'"' -f10`

eval RES=\$$1

echo $RES
-------------------------------

Примеры запуска: 
# /usr/local/bin/dhcp_stat.sh MAX
# /usr/local/bin/dhcp_stat.sh CUR

3. создаем файл в каталоге (/etc/zabbix/zabbix_agentd.d/) с именем (dhcp.conf)
vim /etc/zabbix/zabbix_agentd.d/dhcp.conf
------------------------------------------
UserParameter=dhcp.stat[*],/usr/local/bin/dhcp_stat.sh $1
------------------------------------------

4. Проверка
zabbix_get -s gate -k dhcp.stat[CUR]
zabbix_get -s gate -k dhcp.stat[MAX]

sudo -u zabbix zabbix_agentd -t 'dhcp.stat[CUR]'
sudo -u zabbix zabbix_agentd -t 'dhcp.stat[MAX]'

zabbix_agentd -t / zabbix_get

apt install jq - установка пакета jq для работы с json

zabbix_agentd -t agent.version

zabbix_agentd -t net.if.discovery
zabbix_agentd -t net.if.in[eth0]
zabbix_agentd -t net.if.out[eth0]

zabbix_agentd -t vfs.fs.dicovery 
zabbix_agentd -t vfs.fs.size[/,pused]


!!! zabbix_get - устарел, ставится отдельным пакетом.
zabbix_get -s 192.168.1.10 -p 10050 -k agent.version
zabbix_get -s 192.168.1.10 -p 10050 -k system.sw.os

zabbix_get -s 192.168.1.10 -p 10050 -k system.cpu.util

zabbix_get -s 192.168.1.10 -p 10050 -k net.if.discovery
zabbix_get -s 192.168.1.10 -p 10050 -k net.if.in["eth0"]
zabbix_get -s 192.168.1.10 -p 10050 -k net.if.out["eth0"]

zabbix_get -s 192.168.1.10 -p 10050 -k vfs.fs.discovery
zabbix_get -s 192.168.1.10 -p 10050 -k vfs.fs.size[/,pused]

SNMP

!!! snmp - simple network manager protocol
!!! apt install snmp snmp-mibs-downloader - установка
!!! MIB - manager information base
!!! https://wiki.mikrotik.com/wiki/Manual:SNMP
!!! /interface> print oid
!!! 
:> /etc/snmp/snmp.conf - очистим содержимое конфига

snmpget
snmpset
sbmpwalk

snmpget -c public -v2c 10.0.0.25 .1.3.6.1.2.1.2.2.1.2.3 - получить инфу по MIB .1.3.6.1.2.1.2.2.1.2.3
snmpget -c public -v2c 10.0.0.25 iso.3.6.1.2.1.1.5.0 - получить инфу по MIB iso.3.6.1.2.1.1.5.0

snmpwalk -c public -v2c 10.0.0.25 - получить все MIB с устройства с ip 10.0.0.25


Установка и запуск zabbix proxy

0. устанавливаем
apt install snmp
apt install zabbix-proxy-mysql

1. готовим базу данных
mysql
---------------------------
#drop database zabbix_proxy;
#create database zabbix_proxy character set utf8 collate utf8_bin;
gran all privileges on zabbix_proxy.* to zabbix@localhost indentified by 'zabbix';
---------------------------

zcat /usr/share/zabbix-proxy-mysql/schema.sql.gz | mysql -uzabix -p zabbix_proxy

2. редактируем конфиг
vim /etc/zabbix/zabbix_proxy.conf
---------------------------------
Hostname=gate
ConfigFrequency=60
Server=zabbix.mynet.inc
DBName=zabbix_proxy
DBuser=zabbix
DBPassword=zabbix
--------------------------------

3. запускаем
systemctl enable zabbix-proxy
service zabbix-proxy start

zabbix api

apt install curl jq

0. получаем ключ для запросов к заббикс
curl -s -k -X POST -H 'Content-type: application/json-rpc' -d '
{
    "jsonrpc": "2.0",
    "method": "user.login",
    "params": {
        "user": "Admin",
        "password": "zabbix"
    },
    "id": 1,
} ' http://127.0.0.1/zabbix/api_jsonrpc.php

!!! тут мы получим ключ который потребуется далее
{
    "jsonrpc": "2.0",
    "result": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
    "id": 1
}
!!! ключ живет ровно столько сколько указано для времени активного сеанса пользователя
!!! по умолчанию 30 дней 


1. получаем список хостов из заббикс
curl -s -k -X POST -H 'Content-type: application/json-rpc' -d '
{
    "jsonrpc": "2.0",
    "method": "host.get",
    "params": {
        "output": [
            "hostid",
            "host"
        ],
        "selectInterfaces": [
            "interfaceid",
            "ip"
        ]
    },
    "id": 2,
    "auth": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
} ' http://127.0.0.1/zabbix/api_jsonrpc.php

Отключить \ выключить вход через ldap:

mysql
use zabbix;
update config set authentication_type=0;

MIB \ snmp \ snptt

apt-get install snmp-mibs-downloader
apt install snmptt

### Добавить mib
download-mibs
sed -i "s/^\(mibs *:\).*/#\1/" /etc/snmp/snmp.conf
service snmpd restart


### Пример конфига  snmptt.conf
vim  /etc/snmp/snmptt.conf
--------------------------
EVENT ELRPReport .1.3.6.1.4.1.1916.1.1.6.0.2 "Status Events" Normal
FORMAT ZBXTRAP $A $aA $3

EVENT BGPSESSCHANGE .1.3.6.1.4.1.2636.4.12.0.1 "Status Events" Normal
FORMAT ZBXTRAP $A $aA $8
--------------------------
systemctl restart  snmptt.service 

zabbix ограничение страниц в 20

zabbix ограничение страниц в 20
zabbix ограничения на количество элементов данных

Решение:
администрирование - общие параметры - gui

Отключить триггеры на интерфейсы для хоста super_host_name1, база mysql

use zabbix;
UPDATE triggers
SET status = 1
WHERE triggers.triggerid IN (
    SELECT triggers.triggerid
    FROM
 hosts,
 items,
 functions,
 triggers
    WHERE
 items.hostid = hosts.hostid
 AND
 items.itemid = functions.itemid
 AND
 functions.triggerid = triggers.triggerid
 AND
 triggers.description LIKE 'Interface % is {ITEM.VALUE1} on {HOST.NAME}'
 AND
 hosts.host = 'super_host_name1'

);

Отключить триггеры на интерфейсы для хоста super_host_name1, база postgres

UPDATE triggers
SET status = 1
WHERE triggers.triggerid IN (
    SELECT triggers.triggerid
    FROM
 public.hosts,
 public.items,
 public.functions,
 public.triggers
    WHERE
 items.hostid = hosts.hostid
 AND
 items.itemid = functions.itemid
 AND
 functions.triggerid = triggers.triggerid
 AND
 triggers.description LIKE 'Interface % is {ITEM.VALUE1} on {HOST.NAME}'
 AND
 hosts.host = 'super_host_name1'

);

ссылки:

https://www.zabbix.com/documentation/current/
https://www.zabbix.com/documentation/3.4/ru/manual/discovery/auto_registration - авто регистрация агентов
https://www.zabbix.com/documentation/4.2/ru/manual/config/items/itemtypes/zabbix_agent

https://www.zabbix.com/documentation/4.0/ru/manual/config/macros

https://www.zabbix.com/documentation/4.0/ru/manual/config/templates

https://www.zabbix.com/documentation/current/ru/manual/encryption/using_pre_shared_keys - использование шифрования

https://www.zabbix.com/documentation/current/ru/manual/api - документация zabbix Api
https://pypi.org/project/py-zabbix/  - документация zabbix Api управляем с помощью py-zabbix

https://www.zabbix.com/ru/solutions - решения на zabbix

https://share.zabbix.com/network_devices - огромная база template / шаблонов

https://wikival.bmstu.ru/doku.php?id=zabbix._мониторинг_it_инфраструктуры_предприятия
https://tradenark.com.ua/monitoring/zabbix/check-ssl-certificate-expire-date/


https://ixnfo.com/ustanovka-mib-v-ubuntu-i-reshenie-oshibki-snmp-cannot-find-module.html - MIB


карта / maps:

https://wikival.bmstu.ru/dokuwiki/doku.php?id=zabbix._%D0%BC%D0%BE%D0%BD%D0%B8%D1%82%D0%BE%D1%80%D0%B8%D0%BD%D0%B3_it_%D0%B8%D0%BD%D1%84%D1%80%D0%B0%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D1%8B_%D0%BF%D1%80%D0%B5%D0%B4%D0%BF%D1%80%D0%B8%D1%8F%D1%82%D0%B8%D1%8F_2024


Icon: Cloud(96)
Label: ISP

Host: gate.corpX.un 
Label: {HOST.CONN}
Через Ctrl выделить элементы, добавить Link и подписать его значениями трафика
Zabbix <=5

Out: {gate.corpX.un:net.if.out["eth1"].last()}
In: {gate.corpX.un:net.if.in["eth1"].last()}
Download: {server.corpX.un:speedtest.download.last()}
Upload: {server.corpX.un:speedtest.upload.last()}
Zabbix >=6

Out: {?last(/gate.corpX.un/net.if.out["eth1"])}
In: {?last(/gate.corpX.un/net.if.in["eth1"])}
Download: {?last(/server.corpX.un/speedtest.download)}
Upload: {?last(/server.corpX.un/speedtest.upload)}

Мои значения на карте:

{HOST.NAME} 
{HOST.CONN}

OUT enp1s0: {?last(/nxp-9.lab.local/net.if.out["enp1s0"])}
IN enp1s0: {?last(/nxp-9.lab.local/net.if.in["enp1s0"])}

CPU Utilization: {?last(/nxp-9.lab.local/system.cpu.util)}
Number of CPUs: {?last(/nxp-9.lab.local/system.cpu.num)}

Memory Used:  {?last(/nxp-9.lab.local/vm.memory.utilization)}
Memory Total:{?last(/nxp-9.lab.local/vm.memory.size[total])}


Used Disk: {?last(/nxp-9.lab.local/vfs.fs.dependent.size[/,used])} 
Total Disk  {?last(/nxp-9.lab.local/vfs.fs.dependent.size[/,total])}




--------------------------------------------------------------------

{HOST.NAME}
{HOST.CONN}

OUT enp1s0: {?last(/Zabbix server/net.if.out["enp1s0"])}
IN enp1s0: {?last(/Zabbix server/net.if.in["enp1s0"])}

CPU Utilization: {?last(/Zabbix server/system.cpu.util)}
Number of CPUs: {?last(/Zabbix server/system.cpu.num)}

Memory Used:  {?last(/Zabbix server/vm.memory.utilization)}
Memory Total:{?last(/Zabbix server/vm.memory.size[total])}


Used Disk: {?last(/Zabbix server/vfs.fs.dependent.size[/,used])} 
Total Disk  {?last(/Zabbix server/vfs.fs.dependent.size[/,total])}
Рубрики
syslog \ rsyslog \ zabbix

logrotate

Введение:

Logrotate - это системная утилита, которая управляет автоматической ротацией и сжатием лог-файлов. 
Если в процессе длительной работы сервера файлы не были ротированы, сжаты и периодически не удалялись, то рано или поздно они могут занять весь доступный объем памяти.
Logrotate устанавливается по умолчанию на сервере и настроена для обработки ротации журналов для всех установленных пакетов и приложений.

Основной файл конфигурации — /etc/logrotate.conf.
Для создания настроек отдельных логов — используем директорию /etc/logrotate.d




адрес_файла_лога {
директивы
}

Основные директивы управления и обработки логов:

Опции, определяющие интервал ротации:
!!! Порядок выполнения :  hourly,daily, weekly, monthly, ИЛИ size

hourly - каждый час (cron для logrotate должен быть)
daily - каждый день (по умолчанию)
weekly -  ротация раз в неделю
monthly -  ротация раз в месяц
yearly -  ротация раз в год

size - размер лога, когда он будет достигнут будет перемещен, возможные варианты size 500M

Дополнительные директивы, опции сжатия логов:

compress	- Сжимать логи при ротации. По умолчанию для сжатия используется gzip
compresscmd	- Команда/программа, которая будет использоваться для сжатия логов
compressoptions	- Опции команды ротации, которые будут использоваться при сжатии логов
uncompresscmd	- Команда разархивации логов. По умолчанию gunzip
compressext	- Указать расширение файлов, которое будет указываться для сжатых логов
delaycompress	- Отложить сжатие лога до следующей ротации. Таким образом последняя версия лога после ротации будет несжатой, а более ранние — сжатыми
nocompress	- Не сжимать логи при ротации
nodelaycompress	- Не откладывать сжатие до следующей итерации ротации. Эта опция перегружает опцию delaycompress

Дополнительные директивы, опции копирования:

copy	        - Копировать лог-файл, но не изменять оригинал. 
                  Эту опцию можно использовать, когда надо создать снимок лога на определенный момент, вместо ротации, 
                  либо когда для усечения лога используется внешняя программа. 
                  Если используется опция copy, то опция create, если она указана, 
                  не будет иметь никакого эффекта, так как старый лог остается.

copytruncate	- Урезать оригинальный файл до нулевого размера после создания копии вместо переименования оригинального файла и создания нового. 
                  Эта опция используется тогда, когда программе, записывающей лог, нельзя указать, что нужно закрыть связанный с файлом лога дескриптор и открыть новый. 
                  Такая программа может продолжать писать в старый файл. 
                  При использовании этой опции есть один момент, связанный с тем, что на копирование требуется некоторое время и поэтому файл не может быть скопирован мгновенно. 
                  За время копирования в лог могут быть добавлены записи, которые будут утеряны при усечении файла до нулевого размера. 
                  При использовании этой опции опция create также не будет иметь эффекта, так как старый файл остается на месте

nocopy	        - Не копировать оригинальный лог-файл. 
                  Эта опция перегружает опцию copy

nocopytruncate	- Не усекать оригинальный лог-файл после создания копии. 
                  Эта опция перегружает опцию copytruncate

Дополнительные директивы, опции создания нового лог-файла (после ротации старого):

create права владелец группа
create владелец группа - Указать права доступа, владельца и группу владения нового свежесоздаваемого лог-файла сразу после его создания. 
                         Как уже упоминалось, если используются опции copy и copytruncate, то create не имеет смысла, так как старый файл остается на месте, новый файл не создается. 
                         Чтобы опция create отработала, файл должен отсутствовать. 
                         Права указываются восьмеричными значениями в таком же виде, как и при использовании программы chmod. 
                         Например, 644 или 600. 
                         Если какое-то значение (права/владелец/группа) опущено, то оно будет таким же, как у оригинального файла

nocreate	       - Новые лог-файлы не создаются. 
                         Эта опция перегружает опцию create

Дополнительные директивы, опции, связанные с удалением файла лога:

shred                   - Удалять лог-файл при помощи программы команды «shred -u». По умолчанию используется unlink

shredcycles количество	- Указать количество циклов перезаписи содержимого файла до его удаления. 
                          Если опция не указана, будет использовано значение по умолчанию

noshred	                - Не использовать shred для удаления

maxage количество	- Удалять файлы логов, которые старше, чем указанное количество дней. 
                          Возраст файлов проверяется только когда происходит ротация. 
                          Файлы высылаются по электронной почте на сконфигурированный адрес, если указаны опции mail и maillast

Дополнительные директивы, опции, связанные с датами:


dateext	        - Использовать в названии старых лог-файлов дату вместо номера. 
                  При использовании номера названия выглядят так: logfile.1.gz, logfile.2.gz и так далее

nodateext	- Не использовать дату в названиях старых лог-файлов. 
                  Эта опция перегружает опцию dateext

dateformat форматная-строка - Указать форматную строку для даты, которая будет добавляться к названию лога. 
                              Форматная строка похожа на используемую в команде date, но допустимы только шаблоны %Y(четырехзначный номер года), 
                              %m(двузначный номер месяца), %d(двузначный номер дня месяца) и %s(unix time, количество секунд с 00:00 01.01.1970). 
                              Значение по умолчанию «-%Y%m%d», минус также включен в шаблон, при задании шаблона его можно упустить. 
                              Нужно отметить, что logrotate использует сортировку для определения более старых файлов, которые необходимо удалить, 
                              поэтому строка даты должна учитывать корректную сортировку. 
                              Именно поэтому вначале пишется обычно год, затем месяц и только затем день.

dateyesterday	           - Использовать вчерашнюю дату при ротации. 
                             Таким образом, дата в названии файла будет соответствовать дате файла, который находится внутри архива

Дополнительные директивы, опции, связанные с рассылкой логов:

mail адрес	- Указать адрес, на который будет выслан старый лог после ротации
nomail	        - Не отправлять старые логи по электронной почте.
mailfirst	- Отправлять самый свежий файл после ротации
maillast	- Отправлять самый старый файл после ротации. Этот вариант используется по умолчанию


Опции, связанные с размером и существованием файла лога:
maxsize размер	 - Лог ротируется, когда его размер превысит указанный, еще до наступления следующего интервала ротации (daily, weekly, monthly, yearly). 
                   Поскольку такая ротация не зависит от времени, поэтому использовать в названии файла дату не имеет смысла.

minsize размер	 - Лог ротируется, когда его размер больше указанного, но не ранее, 
                   чем наступает соответствующий временной интервал ротации (daily, weekly, monthly, yearly)

size размер	 - Лог ротируется, когда его размер больше указанного количества байт. 
                   Если после размера указана буква k, размер считается в килобайтах, 
                   если M — в мегабайтах, если G — в гигабайтах. Например, 1G или 10M.

ifempty	         - Ротировать файл лога, даже если он пуст. Используется по умолчанию.

notifempty	 - Не ротировать файл лога, если он пуст. Перегружает опцию ifempty.

missingok	 - Если файл лога отсутствует, перейти к следующему без сообщения об ошибке

nomissingok	 - Если файл лога отсутствует, возникнет ошибка. 
                   Этот параметр установлен по умолчанию.

Дополнительные директивы, опции , связанные с директориями, в которых хранятся логи:

olddir директория  - Директория, в которую будут перемещаться логи при ротации. 
                     Эта директория должна находиться на том же устройстве, что и ротируемый файл лога. 
                     Путь к директории можно указывать как абсолютный, так и без полного пути. 
                     Во втором случае он будет считаться поддиректорией директории, в которой хранится оригинальный файл лога. 
                     Когда эта опция указана, все старые версии логов попадают в эту директорию. 
                     Опция может быть перегружена опцией noolddir

noolddir           - Логи ротируются в той же директории, где находится оригинальный фай

Дополнительные директивы, опции выполнения скриптов:


postrotate/endscript	- Строки, находящиеся между словами postrotate и endscript, каждое из которых должно находиться в отдельной строке, 
                          выполняются с использованием /bin/sh после ротации файла лога. 
                          Обычно скрипту в качестве первого аргумента передается полное имя файла лога с путем. 
                          Если указана директива sharedscripts, то передается список файлов. 
                          Таким образом можно выполнить скрипт для всех файлов сразу

prerotate/endscript	- Строки, находящиеся между словами prerotate и endscript, каждое из которых должно находиться в отдельной строке, 
                          выполняются с использованием /bin/sh перед ротацией файла лога.
                          Обычно скрипту в качестве первого аргумента передается полное имя файла лога с путем. 
                          Если указана директива sharedscripts, то передается список файлов.

sharedscripts	        - В обычном режиме скрипты выполняются по одному разу на каждый файл, указанный для ротации. 
                          Таким образом скрипты могут быть выполнены несколько раз, по разу для каждого файла, указанного для ротации. 
                          Если указана директива sharedscripts, то скрипты выполняются по одному разу, но в качестве аргументов им передается список файлов.
                          Если же ни один файл лога не ротируется, скрипты выполнены не будут. 
                          Если в процессе выполнения скрипта возникнет ошибка, то действие не будет завершено для всех логов.

nosharedscripts         - Запускать prerotate и postrotate скрипты для каждого лога, который ротируется. 
                          Это значение по умолчанию, кроме того, эта директива перегружает sharedscripts. 
                          Скриптам передается абсолютный путь к файлам логов. Если во время выполнения скрипта возникнет ошибка, 
                          то действие не будет завершено только для одного текущего файла лога.

preremove/endscript	- Строки, находящиеся между словами preremove и endscript, каждое из которых должно находиться в отдельной строке, 
                          выполняются с использованием /bin/sh перед удалением старого файла лога. 
                          logrotate передаст название файла, который будет удален, скрипту в качестве аргумента

firstaction/endscript	- Строки, находящиеся между словами firstaction и endscript, каждое из которых должно находиться в отдельной строке, 
                          выполняются с использованием /bin/sh один раз до того, как лог-файлы будут ротированы и еще до того, как будет выполнена секция prerotate. 
                          Это произойдет только в том случае, если хотя бы один лог-файл будет действительно ротироваться. 
                          Скрипту передается весь список файлов текущей секции в качестве аргументов. 
                          Если скрипт заканчивает работу с ошибкой, другого запуска не будет.

lastaction/endscript	- Строки, находящиеся между словами lastaction и endscript, каждое из которых должно находиться в отдельной строке, 
                          выполняются с использованием /bin/sh один раз только после того, как лог-файлы будут ротированы и даже после того, как будет выполнена секция postrotate. 
                          Это произойдет только в том случае, если хотя бы один лог-файл ротирован. 
                          Скрипту передается весь список файлов текущей секции в качестве аргументов. 
                          Если скрипт заканчивает работу с ошибкой, другого запуска не будет.

Дополнительные директивы, общего назначения:

extention расширение	- Лог-файлы с указанным расширением могут сохранять его после ротации. 
                          Если используется компрессия, то расширение с типом архива (обычно .gz) появляется после расширения. 
                          Например, если у вас файл лога называется mylog.foo и вы хотите получить при ротации файл mylog.1.foo.gz, а не mylog.foo.1.gz

rotate количество	- Лог-файлы ротируются указанное количество раз до удаления или отправки на адрес, указанный в директиве mail. 
                          Если количество равно 0, старые версии просто удаляются вместо ротации.

start номер            - Указать номер, используемый как база для нумерации при ротации. 
                         Например, если вы указываете 0, то оригинальный файл будет ротироваться в файл с окончанием .0, и далее по увеличению, если указать 9, то нумерация начнется с .9. 
                         Файлы в любом случае будут ротироваться такое количество раз, которое указано в директиве count.

su пользователь группа	- Выполнять ротацию логов под указанным пользователем и группой вместо пользователя по умолчанию (обычно root). 
                          Если у пользователи или группы недостаточно прав для осуществления ротации, возникнет ошибка.

include файл-или-директория - logrotate считывает указанный файл и вставляет его как есть в конфигурационный файл в место вставки директивы include. 
                              Если указана директория, файлы из нее сортируются по алфавиту и затем вставляются в конфигурацию. 
                              При этом, если файлы не являются обычными файлами, они игнорируются. 
                              Это могут быть, например, именованные пайпы или директории. 
                              Также игнорируются файлы, имеющие расширения, указанные в директории tabooext.

tabooext [+] список - Изменение текущего списка игнорируемых расширений. Если перед списком стоит +, то текущий список дополняется указанным. 
                      Если + не указан, то список заменяется. 
                      По умолчанию список изначально включает следующие расширения: .rpmsave, .rpmorig, ~, .disabled, .dpkg-old, .dpkg-dist, .dpkg-new, .cfsaved, 
                      .ucf-old, .ucf-dist, .ucf-new, .rpmnew, .swp, .cfsaved, .rhn-cfg-tmp-*




Часто используемые:

notifempty - не ротировать пустой лог-файл
rotate - указывает сколько старых логов нужно хранить, в параметрах передается количество
dateext - добавляет дату ротации перед заголовком старого лога
compress - указывает, что лог необходимо сжимать
delaycompress - не сжимать последний и предпоследний журнал
extension - сохранять оригинальный лог файл после ротации, если у него указанное расширение
mail - отправлять Email после завершения ротации
maxage - выполнять ротацию журналов, если они старше, чем указано
missingok - не выдавать ошибки, если лог файла не существует
olddir - перемещать старые логи в отдельную папку
start - номер, с которого будет начата нумерация старых логов
nocopytruncate - не сбрасывать файл журнала после копирования
copytruncate - сбрасывать файл журнала после копирования
create - указывает, что необходимо создать пустой лог файл после перемещения старого
create 640 root – с какими правами и владельцем будет создан новый файл
nocreate - не создавать пустой журнал

postrotate/endscript - выполнить произвольные команды после ротации, 
                       между postrotate и endscript расположены команды интерпретатора sh(1)
                       исполняемые непосредственно после ротации

Примеры:

!!! Примеры: /etc/logrotate.d

Пример 000:
/var/log/mydaemon/mydaemon.log /var/log/mydaemon/error.log{
    # Ежедневная ротация
    daily
    # Начинать нумерацию с 0
    start 0
    # Ротировать 30 раз до удаления
    rotate 30
    # Не генерировать ошибку, если файла лога нет
    missingok
    # Удалять логи при помощи команды shred
    shred
    # Делать 3 цикла перезаписи
    shredcycles 3
    # Отложить сжатие последнего лога
    delaycompress
    # Выполнять postrotate только один раз
    sharedscripts
    # После ротации послать программе сигнал SIGHUP, в результате чего
    # будут переоткрыты дескрипторы логов
    # (многие программы поддерживают такое поведение)
    postrotate
        kill -SIGHUP $(cat /var/run/mydaemon.pid)
    endscript
}


Пример 0:
/var/log/runtel/cdr.log
/var/log/runtel/core.log
/var/log/runtel/event-hunter.log
/var/log/runtel/iface.log
{
daily
size 10M
missingok
copytruncate
create 0640 root adm
rotate 30
compress
}


Пример 1:
/var/log/messages {
size 10M
rotate 3
compress
delaycompress
}

Пример 2:
/var/log/messages1 {
daily
size 10M
rotate 3
compress
delaycompress
}

Пример 3:
/var/log/testing/logrotate.conf 
/var/log/testing/logs/*.log {
    hourly
    missingok
    rotate 24
    compress
    create
}

Пример 4:
/var/log/asterisk/debug
/var/log/asterisk/console
/var/log/asterisk/security
/var/log/asterisk/messages
/var/log/asterisk/full
/var/log/asterisk/*_log
/var/log/asterisk/cdr-csv/Master.csv
{
    daily
    dateext
    dateformat -%Y%m%d.log
    missingok
    notifempty
    rotate 63
    compress
    delaycompress
    sharedscripts
    postrotate
        /usr/sbin/asterisk -rx 'logger reload' > /dev/null 2> /dev/null
    endscript
}

Пример 5:
/var/log/audit/audit.log {
compress
dateext
rotate 15
daily
missingok
notifempty
create 600 root root
sharedscripts
postrotate
/sbin/service auditd restart 2> /dev/null > /dev/null || true
endscript
}

Пример 6:
/var/log/postgresql/*.log {
       daily
       rotate 7
       copytruncate
       compress
       delaycompress
       notifempty
       missingok
       su root root
}

Пример 7:
/var/log/php-fpm/*.log {
    rotate 14
    missingok
    notifempty
    sharedscripts
    compress
    maxage 14
    postrotate
        /bin/kill -SIGUSR1 `cat /var/run/php-fpm/php-fpm.pid 2>/dev/null` 2>/dev/null || true
    endscript
}

Пример 8:
/var/log/logstash-forwarder/*.log {
    rotate 30
    size=10M
    missingok
    notifempty
    compress
    maxage 30
    postrotate
        (/usr/bin/systemctl restart logstash-forwarder || /sbin/service logstash-forwarder restart) > /dev/null 2>&1
    endscript
}
/var/log/logstash-forwarder/*.err {
    rotate 30
    size=10M
    missingok
    notifempty
    compress
    maxage 30
    postrotate
        (/usr/bin/systemctl restart logstash-forwarder || /sbin/service logstash-forwarder restart) > /dev/null 2>&1
    endscript
}

Пример 9:
/var/log/dhcp.log {
    daily
    rotate 10
    missingok
    notifempty
    compress
    delaycompress
    sharedscripts
    create 0600 root root
    postrotate
        /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
    endscript
}


Пример 10:
/var/log/openvpn/openvpn*.log {
    daily
    rotate 7
    compress
    copytruncate
    delaycompress
    missingok
    notifempty
}

Команды:

man logrotate - помощь

С ключом -d программа будет только эмулировать полезную активность, выводя вам на экран диагностические сообщения (реально она логи не тронет).
Теперь давайте протестируем, удачно ли создан конфиг:
logrotate -d /etc/logrotate.d/example
logrotate -d /etc/logrotate.d/example-app - выполнить проверку example-app
logrotate -d /etc/logrotate.d/rsyslog.conf - выполнить проверку rsyslog.conf

logrotate /etc/logrotate.conf --debug - можно выполнить тестирование конфигурации

Если всё в порядке, то запускайте утилиту в боевом режиме:
logrotate -v -f /etc/logrotate.d/example

Если вы хотите заставить LogRotate производить ротацию файла журнала, тогда надо использовать флаг –force:
logrotate /home/testing/logrotate.conf --state /home/testing/logrotate-state --verbose --force


cat /var/lib/logrotate/status - информация о том, что и когда ротировал logrotate


Подстройка расписания под себя:
/etc/cron.d/logrotate_apache2
------------
0/30 * * * * root /usr/sbin/logrotate /etc/logrotate.d/apache2
------------
Рубрики
syslog \ rsyslog \ zabbix

loganalyzer обновление \ update

Ссылки

http://loganalyzer.adiscon.com/downloads/ - последние версии тут
https://loganalyzer.adiscon.com/articles/how-to-upgrade-loganalyzer/ - офф инструкция по обновлению
https://github.com/rsyslog/loganalyzer - разработака на гите

Обновление

0. !!! Перед обновление обезательно делаем бэкап.
!!! ну хотябы так  tar -cvzf loganalyzer.tar.bz2 /var/www/loganalyzer 
1. переходим в любой каталог
cd /root -  перешли в каталог root
2.   Скачиваем дистрибутив 
wget http://download.adiscon.com/loganalyzer/loganalyzer-4.1.11.tar.gz - скачиваем новый дистрибутив lofanalyzer
3. распаковываем 
tar -xvf loganalyzer-4.1.11.tar.gz - распаковываем архив
4. Обновляем loganalyzer
!!! например просто перемещаем содержимое ранее скаченного архива
!!! mv /root/loganalyzer-4.1.11/* /var/www/loganalyzer -  обновляем loganalyzer

P.S. Еще есть вариант обновлять через git 
git https://github.com/rsyslog/loganalyzer.git
Рубрики
CentOS syslog \ rsyslog \ zabbix

CentOS \ loganalyzer

Создаем пустую базу loganalyzer:

mysql -u root -p - открываем консоль mysql
CREATE DATABASE loganalyzer; - создать базу 
GRANT ALL PRIVILEGES ON loganalyzer.* TO 'loganalyzer'@'localhost' IDENTIFIED BY 'log_password'; - создать нового пользователя и дать ему доступ
flush privileges; - применим привилегии

Установка

!!! LAMP уже должен быть установлен
http://loganalyzer.adiscon.com/tag/download/ - страница дистрибутива
cd /var/www - переходим в каталог /var/www
wget http://download.adiscon.com/loganalyzer/loganalyzer-4.1.5.tar.gz - скачиваем loganalyzer
tar zxvf loganalyzer-4.1.5.tar.gz - распаковываем
cd loganalyzer-4.1.5 - входим в только что распакованный каталог 
cp -r src/ /var/www/html/loganalyzer - копируем дистрибутив loganalyzer 
cp -r contrib/* /var/www/html/loganalyzer/ - копируем дистрибутив loganalyzer 
cd /var/www/html/loganalyzer/ - переходим в каталог /var/www/html/loganalyzer/
rm configure.sh secure.sh - разрешаем выполнение файлов configure.sh secure.sh
touch config.php - создаем файл конфигурации
chmod 777 config.php - даем полные права на редактирование
chmod 666 config.php - убираем права на запись / даем права 666 config.php

Шаги установки

------------------------------------------------------
1. создаем базу для loganalyzer
2. очистим файл конфигурации /etc/loganalyzer/config.php
3. Теперь мы можем установить loganalyzer со воими настройками
в браузере откроем http://server_name/loganalyzer/install.php
Step 1 - жмем next
Step 2 - жмем next
Step 3 Basic configuration - заполняем (рекомендую создать свою базу loganalyzer)
------------------------------------------------------
database host     - localhost
database port     - 3306
database name     - loganalyzer
databasr user     - loganalyzer
table prefix      - пофиг
database password - наш пароль
Require user to be logged in - yes (позволит создать пароль для входа)
------------------------------------------------------
Step 4 Create tables - создать таблицы для loganalyzer
Step 5 - тут нам напишут удалось или нет
Step 6 Create The Main Useraccount - создаем пользователя для логина
Step 7 Create the first source for syslog messages - Подключаем базу с логами  
cat  /etc/rsyslog.conf - если требуется смотрим  rsyslog параметры базы
------------------------------------------------------
source name        - Любое
source type        - MYSQL Native
select view        - Syslog Fields
table type         - MonitorWare
database host      - localhost
database port      - 3306
database name      - Syslog
database tablename - SystemEvents
databasr user      - rsyslogdbadmin
database password  - наш пароль
------------------------------------------------------

Установка кодировки

Admin Center -> Preferences -> Default character encoding -> UTF8 	

Не забываем после установки убрать права на конфиг:

cd /var/www/html/loganalyzer/ - перешли в каталог loganalyzer
chmod 644 config.php - убираем права

Ручная чистка базы:

Очистка логов вручную если не сработало авто
find / -name maintenance.php - ищем скрипты обслуживания  loganalyzer
cd /var/www/html/loganalyzer/cron - переход примерное расположение скриптов обслуживания
php ./maintenance.php cleandata 1 olderthan 20 02 2018 -  очистка базы до 20.02.2018

Скрипт очистки базы

 
#!/bin/sh
cd /var/www/html/loganalyzer/cron/
php ./maintenance.php cleandata 1 olderthan 2592000
Рубрики
syslog \ rsyslog \ zabbix

zabbix \ мониторинг оборудования и программ \ debian

ссылки:

https://www.zabbix.com/wiki/non-english/ru/installation/debian - Установка Zabbix на Debian
https://www.zabbix.com/documentation/2.0/ru/manual/concepts/agent  - Агент
https://www.zabbix.com/documentation/2.4/manual/installation/install_from_packages - установка из пакетов
https://www.zabbix.com/documentation/2.0/ru/manual/discovery/network_discovery/rule - Настройка правил
https://www.zabbix.com/documentation/2.0/ru/manual/appendix/install/windows_agent  - Установка Zabbix Windows агента
https://www.zabbix.com/documentation/3.0/ru/manual/config/visualisation/maps/map - графики
http://blog.denisbondar.com/post/vsphere-esxi-zabbix - мануал по настройке мониторинга для ESXI
https://wiki.mikrotik.com/wiki/Manual:SNMP - snmp mikrotik


LAMP(Linux Apache MySQL PHP) должен быть уже установлен
wget http://repo.zabbix.com/zabbix/2.2/debian/pool/main/z/zabbix-release/zabbix-release_2.2-1+wheezy_all.deb
dpkg -i zabbix-release_2.2-1+wheezy_all.deb
apt-get update
apt-get install zabbix-server-mysql zabbix-frontend-php
apt-get install zabbix-agent для клиентских пк 
http ://youre_server_ip/zabbix

Apache configuration file for Zabbix frontend is located in /etc/apache2/conf.d/zabbix. Some PHP settings are already configured.
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 Europe/Moscow

VSPHERE ESXI ZABBIX — ПОЛНЫЙ МОНИТОРИНГ

0.
Следующий этап — настройка файла zabbix_server.conf. Включите следующие опции:
StartVMwareCollectors = 1
VMwareCacheSize = 8M
VMwareFrequency = 60

1. Создаем узел ESXi
После импорта шаблонов можно приступить к созданию узла сети. 
Как обычно создаем новый узел сети в Zabbix: 
Настройка — Узлы сети — Создать узел сети.
На вкладке Узел сети заполняем всю необходимую информацию: 
Имя узла, видимое имя, группа. 
IP-адрес здесь можно не указывать, 
так как ни одно стандартное средство для данного узла работать не будут.

2. На вкладке Шаблоны подключам один единственный шаблон: 
Template Virt VMware

3.Затем на вкладе Макросы создаем три макроса:

{$URL} — в значении указываем URL https://IP-адрес-ESXi/sdk (не забудьте тут указать IP-адрес вашей ESXi.
{$USERNAME} — в значении указываем имя пользователя
{$PASSWORD} — в значении указываем пароль пользователя

4.Рекомендую в ESXi создать отдельного пользователя на самом 
верхнем уровне иерархии (в vSphere Client) с правами read only.

5.Спустя минимум час наблюдаем добавление виртуальных машин и гипервизора в Zabbix. 
Для этого переходим в меню: 
Настройка — Узлы сети и справа выбираем группу Hypervisors или Virtual Machines. 
Если у вас есть кластеры, то Zabbix создаст группы по кластерам автоматически.
Если все появилось, то наблюдаем за собираемыми данными в меню: 
Мониторинг — Последние данные.

Нагрузочный тест

https://www.zabbix.com/documentation/3.0/ru/manual/quickstart/notification

cat /dev/urandom | md5sum

Для настройки:

UDP:161 - для опросов
UDP:162 - для получения трапов
Для корректной работы v3 не забывайте указывать в настройках engine-id
Рубрики
syslog \ rsyslog \ zabbix

Debian \ rsyslog \ loganalyzer \ linux \ windows \ Evtsys \ rsyslog

Сборка и просмотр логов
rsyslog — колектор логов
loganalyzer — просмотр логов

Источники:

http://www.k-max.name/linux/rsyslog-na-debian-nastrojka-servera/ - подробно о rsyslog
https://habrahabr.ru/post/125410/
https://wiki.yola.ru/evtsys:evtsys
https://habrahabr.ru/post/213519/
https://code.google.com/archive/p/eventlog-to-syslog/downloads - клиент для windows 
http://yakim.org.ua/articles/servers/113-rsyslog-loganalizer.html
Install Rsyslog and LogAnalyzer on Centos 6
https://habrahabr.ru/post/321262/ http://terraltech.com/syslog-server-with-rsyslog-and-loganalyzer/ https://letsclearitup.com.ua/debian/sbor-i-prosmotr-logov-s-pomoshhyu-loganalyzer.html
Системные журналы Linux (управление логированием)
http://viking-k.livejournal.com/23689.html

Установка коллектора логов:

0. rsyslog - по умолчанию установлен в debian и в дистрибутивах на его основе( например ubuntu -> linuxmint)
apt-get install rsyslog - установка rsyslog

1. Приём на сервере
nano /etc/rsyslog.conf
В /etc/rsyslog.conf должны быть раскомментированы строки:
------------------------------------------------------
$ModLoad imudp
$UDPServerRun 514
$ModLoad imtcp
$InputTCPServerRun 514
------------------------------------------------------

Файлы rsyslog
/etc/default/rsyslog -  файл задает опции, передаваемые демону rsyslogd при запуске
/etc/init.d/rsyslog - стартовый скрипт
/etc/logrotate.d/rsyslog - настройки ротации логов
/etc/rsyslog.conf - основной конфиг
/usr/lib/rsyslog/* - библиотеки для работы сислога
/usr/sbin/rsyslogd - бинарник демона, который работает в фоне
/usr/share/doc/rsyslog/* - файлы документации

2. Перечитываем настройки 
/etc/init.d/rsyslog restart

3. Нам требуется установить rsyslog-mysql для хранения логов в mysql
!!! Внимание запоминаем все введенные данные (логины, пароли) 
apt-get install rsyslog-mysql

P.s. На случай забывчивости
dpkg-reconfigure rsyslog-mysql

Установка loganalyzer — просмотр логов
Можно подключить любую базу с логами (текс, mysql, и т.д.)

0. Установка 
apt-get install apache2 php5 php5-mysql php5-gd phpmyadmin - ставим LAMP
apt-get install loganalyzer - ставим loganalyzer
1. создаем базу для loganalyzer
2. очистим файл конфигурации /etc/loganalyzer/config.php
3. Теперь мы можем установить loganalyzer с настройками
в браузере откроем http://server_name/loganalyzer/install.php
Step 1 - жмем next
Step 2 - жмем next
Step 3 Basic configuration - заполняем (рекомендую создать свою базу loganalyzer)
------------------------------------------------------
database host     - localhost
database port     - 3306
database name     - loganalyzer
databasr user     - loganalyzer
table prefix      - пофиг
database password - наш пароль
Require user to be logged in - yes (позволит создаст пароль для входа)
------------------------------------------------------
Step 4 Create tables - создать таблицы для loganalyzer
Step 5 - тут нам напишут удалось или нет
Step 6 Create The Main Useraccount - создаем пользователя для логина
Step 7 Create the first source for syslog messages - Подключаем базу с логами  
cat  /etc/rsyslog.d/mysql.conf - если требуется смотрим  rsyslog параметры базы
------------------------------------------------------
database host      - localhost
database port      - 3306
database name      - Syslog
database tablename - SystemEvents
databasr user      - rsyslog
database password  - наш пароль
------------------------------------------------------
P.S. Файлы :
/etc/rsyslog.d/mysql.conf - тут можно подсмотреть параметры подключения к mysql у rsyslog
/etc/loganalyzer/config.php - файл конфигурации
/usr/share/doc/loganalyzer - документация
/usr/share/loganalyzer - каталог с файлами loganalyzer
http://server_name/loganalyzer/ - вход в loganalyzer
http://server_name/loganalyzer/install.php - установочный скрипт (следует удалить после настройки)

Установка клиента для windows
брать тут:

https://code.google.com/archive/p/eventlog-to-syslog/downloads
copy evtsys.* %systemroot%\system32

%systemroot%\system32\evtsys.exe -i -h hostname_ip -s 240 
net start evtsys

Параметры evtsys.exe

evtsys.exe -i -h 192.168.1.246
evtsys.exe -i -l 0 -h 192.168.1.246
------------------------------------------------------
-i	        Установить сервис
-u	        Удалить сервис
-d	        Режим отладки. Запуститься как консольная программа
-h syslog	Имя хоста куда отправлять логи
-b syslog2	Имя второго хоста кому дублировать логи
-f 3	        Facility
-l 0	        Минимальный уровень отсылаемых сообщений: 
                0=Всё, 1=Критические, 2=Ошибки, 3=Предупреждение, 4=Информация
-n	        Отправлять только события включенные в evtsys.cfg
-p 514	        Номер порта syslog
-q 0	        Опросить DHCP чтобы получить имя хоста syslog и порт. 0=Включить, 1=Выключить
-s 60	        Интервал между сообщениями о статусе (в минутах). 0=Отключить
------------------------------------------------------
Facility -f 
0 kernel messages
1 user-level messages
2 mail system
3 system daemons
4 security/authorization messages
5 messages generated internally by syslogd
6 line printer subsystem
7 network news subsystem
8 UUCP subsystem
9 clock daemon
10 security/authorization messages
11 FTP daemon
12 NTP subsystem
13 log audit
14 log alert
15 clock daemon
16 local use 0 (local0)
17 local use 1 (local1)
18 local use 2 (local2)
19 local use 3 (local3)
20 local use 4 (local4)
21 local use 5 (local5)
22 local use 6 (local6)
23 local use 7 (local7)

Установка клиента rsyslog linux ( передаем на другой сервер rsyslog)

0) Установим (на debian скорее уже он установлен)
apt-get install rsyslog

1) редактируем rsyslog.conf добавим строку *.* @@192.168.1.51
nano /etc/rsyslog.conf
------------------------------------------------------
---конфиг---
*.* @@192.168.1.51
*.* @@nagios.b14esh.com
---конфиг---
------------------------------------------------------

Описание:
*.* — описание всех логов по важности и программах, которые их пишет.
@@ — отсылать логи по TCP
@ — отсылать логи по UDP
192.168.1.51 — сервер, на который будут направлены логи.

service rsyslog restart
Звездочка перед точкой соответствует любому источнику, после точки - любому уровню. 
Слово none после точки - никакому уровню для данного источника. 
Можно указывать несколько источников в одном селекторе (через запятую).

*.*;auth,authpriv.none -/var/log/syslog
*.*;auth,authpriv.none;cron.none -/var/log/syslog


Источник (он же категория) может быть следующим:
------------------------------------------------------
0 - kern -  Сообщения ядра
1 - user -  Сообщения пользовательских программ
2 - mail -  Сообщения от почтовой системы.
3 - daemon - Сообщения от тех системных демонов, которые в отличие от FTP или LPR не имеют выделенных специально для них категорий.
4 - auth - Все что связано с авторизацией пользователей, вроде login и su (безопасность/права доступа)
5 - syslog - Система протоколирования может протоколировать сообщения от самой себя.
6 - lpr - Сообщения от системы печати.
7 - news - Сообщения от сервера новостей. (в настоящее время не используется)
8 - uucp - Сообщения от UNIX-to-UNIX Copy Protocol. Это часть истории UNIX и вероятнее всего она вам 
           никогда не понадобится (хотя до сих пор определенная часть почтовых сообщений доставляется через UUCP).
9 - cron - Сообщения от системного планировщика.
10 - authpriv - То же самое, что и auth, однако сообщения этой категории записываются в файл, 
                который могут читать лишь некоторые пользователи (возможно, эта категория выделена потому, 
                что принадлежащие ей сообщения могут содержать открытые пароли пользователей, 
                которые не должны попадать на глаза посторонним людям, 
                и следовательно файлы протоколов должны иметь соответствующие права доступа).
11 - ftp - При помощи этой категории вы сможете конфигурировать ваш FTP сервер, что бы он записывал свои действия.
12 - NTP - сообщения сервера времени
13 - log audit
14 - log alert
15 - clock daemon - сообщения демона времени с 16 по 23   
local0\local7 - Зарезервированные категории для использования администратором системы. 
                  Категория local7 обычно используется для сообщений, генерируемых на этапе загрузки системы.
                  mark (не имеющая цифрового эквивалента) - присваивается отдельным сообщениям, формируемым самим демоном syslogd 
------------------------------------------------------



Под приоритет (степени важности) сообщений заданы 8 уровней важности, которые кодируются числами от 0 до 7:
------------------------------------------------------
0 - emerg (старое название PANIC) - Чрезвычайная ситуация. Система неработоспособна.
1 - alert - Тревога! Требуется немедленное вмешательство.
2 - crit - Критическая ошибка (критическое состояние).
3 - err (старое название ERROR) - Сообщение об ошибке.
4 - warning (старое название WARN) - Предупреждение.
5 - notice - Информация о каком-то нормальном, но важном событии.
6 - info - Информационное сообщение.
7 - debug - Сообщения, формируемые в процессе отладки.
------------------------------------------------------

Очистка базы

Очистка базы данных от лишней информации возможна двумя способами:
1. Вручную.В web-интерфейсе заходим в Центр администрирования, выбираем Источники данных и в открывшемся 
   списке источников изем иконку с изображением мусорного ведерка. 
   Дальше все делается в соответствующем  мастере.
    
2.Автоматически. 
cd /var/www/loganalyzer/cron
chmod +x maintenance.sh
nano maintenance.sh
cd /var/www/loganalyzer/cron/
php ./maintenance.php cleandata 1 olderthan 2592000
crontab -e
# Удаляем лишнее из BD loganalyzer
1 3 * * * /var/www/loganalyzer/cron/maintenance.sh >> /tmp/maintenance.log

Рубрики
syslog \ rsyslog \ zabbix мониторинг

LOG \ логи \ journalctl \ dmesg \

как работают логи / logrotate / укорачивание

Системный журнал постоянно растёт. 
Это значит, что каков бы ни был размер файловой системы /var, она в конце концов заполнится журналами под завязку — если как-то их не укорачивать. 
К сожалению, в Linux укоротить файл от начала, отрезав самые старые записи, нельзя, как нельзя и добавлять новые записи в начало файла. 
Эти операции легко реализовать с помощью копирования нужной области в новый файл и последующего переименования, но, во-первых, 
соблюсти атомарность таких составных операций нелегко, а во-вторых, они требуют удвоенного места 
в файловой системе на время работы (и, стало быть, каких-то аварийных процедур на случай нехватки места).
Поэтому в Linux принят другой, существенно менее ресурсоёмкий алгоритм, помогающий избежать переполнения /var, т.е. «прокручивание» системных журналов. 
Суть алгоритма в следующем: когда настаёт пора укоротить журнал (например, раз в неделю или если файл журнала достиг определённого размера), 
этот файл переименовывают, и открывают новый пустой файл с тем же именем. 
Если хранить несколько (скажем, семь) переименованных старых фай-лов, с ними уже можно производить операцию «отбрасывания старого», 
самый старый — седьмой — файл удаляется, шестой переименовывается в седьмой, пятый — в шестой, и т.д. до первого (моложе которого только текущий журнал), 
который переименовывается во второй. 
Только тогда можно переименовать текущий журнал в «первый старый», и открыть новый. 
Получается очередь устаревающих файлов, пополняемая с одной стороны и усекаемая с другой.
Как правило имя «первого старого» журнала получается добавлением к имени журнала суффикса *.1, второго —*.2 и т.д.
Прокручиванием системных журналов занимается утилита logrotate, которая тоже управляется 
конфигурационным файлом /etc/logrotate.conf и в 64-каталогом /etc/logrotate.d/. 
Согласно настройкам, старые файлы можно сжимать упаковщиками bzip2 (как в примере) или gzlp, можно задавать им определённые права доступа, 
можно посылать сигнал некоторой службе (чтобы она заметила подмену журнала, если она сама, а не syslogd занимается его пополнением) и т. п.

Для уровней важности, приняты следующие обозначения:

0: emergency (неработоспособность системы)
1: alerts (предупреждения, требующие немедленного вмешательства)
2: critical (критическое состояние)
3: errors (ошибки)
4: warning (предупреждения)
5: notice (уведомления)
6: info (информационные сообщения)
7: debug (отладочные сообщения)

Systemd:

Systemd состоит из трех основных компонентов:
systemd         - менеджер системы и сервисов
systemctl       - утилита для просмотра и управление статусом сервисов
systemd-analyze - предоставляет статистику по процессу загрузки системы, проверяет корректность unit-файлов и так же имеет возможности отладки systemd

journalctl

journalctl --list-boots - просмотреть журналов загрузки
journalctl -b  - история с момента запуска системы
journalctl -b 0 - просмотреть журнал начиная с текущего старта системы
journalctl -b -1 - просмотреть журнал предыдущей загрузки

journalctl -p 0 - посмотреть события emergency
journalctl -p 2, journalctl покажет все сообщения с уровнями 2, 1 и 0. (alerts, emergency, critical)

journalctl -f  - чтобы следить за логами
journalctl -xe  - открыть журнал на последней записи
journalctl _UID=0 - следить за логами  пользователя с UID=0

journalctl _COMM=sshd - поиск по sshd
journalctl _COMM=sshd -o json-pretty поиск по sshd в JSON
journalctl _COMM=cron - история запуска по cron
journalctl _COMM=cron --since=«date» --until="date"  - история запуска по cron

journalctl -k - посмотреть сообщения от ядра Linux за текущую загрузку

journalctl --since «2015-01-10» --until "2015-01-11 03:00"  - просмотр журнала за определенный период времени
journalctl --since 09:00 --until «1 hour ago» - просмотр журнала за определенный период времени (с 9 утра и до момента, час назад)
journalctl --since yesterday - просмотр журнала за определенный период времени (со вчерашнего дня)


journalctl --disk-usage
journalctl --vacuum-size=1G

systemctl list-units --type=service - покажет названия сервисов

journalctl -u NAME.service - просмотреть логи от NAME.service
journalctl -u NetworkManager.service - просмотреть логи от NetworkManager.service

!!! можно просмотреть лог приложения, указав его исполняемый файл
journalctl /usr/sbin/nginx --since today - просмотреть все сообщения от nginx за сегодня

Ограничение размера журнала / Удаление журналов

Ограничение размера журнала:
Если journald настроен что бы сохранять журналы после перезагрузки, 
то по умолчанию размер журнала ограничен 10% от объема файлового раздела и максимально может занять 4 Гб дискового пространства.

Максимальный объем журнала можно скорректировать, раскомментировав и отредактировав следующий параметр в файле конфигурации journald:
----------------
SystemMaxUse=50M
----------------

Удаление журналов:
Удалить файлы архивных журналов, можно вручную с помощью rm или использовав journalctl.
journalctl --vacuum-size=100M - удалить журналы, оставив только последние 100 Мб
journalctl --vacuum-time=7d - удалить журналы, оставив журналы только за последние 7 дней

dmesg

 
gnome-system-log -в squeeze
dmesg > dmesg.txt
lspci -v > lspci.txt
cp /var/log/Xorg.0.log ~


dmesg | more - все устройства
dmesg | less - все устройства
dmesg | grep -i pci	- команда выводит список всех устройств PCI
dmesg | grep -i isa	- команда выводит список всех устройств ISA
dmesg | grep -i memory	- память
dmesg | grep -i scsi	- команда выводит список всех устройств scsi
dmesg | grep -i usb	- команда выводит список всех устройств usb
dmesg | grep -i tty	- консоль\терминал\ввод
dmesg | grep -i cpu     - процессор

cat /var/lib/dhcp/dhcpd.leases  - посмотреть какие адреса раздал dhcpd (DHCP сервер)
cat /proc/net/dev               - сеть какие пакеты передаются

tail -f /var/log/messages       - следим за логами системы
tail -fn0 /var/log/messages     - следим за /var/log/messages ( n0 - выведет при запуске 0 строк и увидим новые записи в файле )
tail -fn0 /var/log/auth.log     - следим за изменениями в лог файле /var/log/auth.log 

tail -n 20 /var/log/messages	- General message and system related stuff
tail -n 20 /var/log/auth.log	- Authenication logs
tail -n 20 /var/log/kern.log	- Kernel logs
tail -n 20 /var/log/cron.log	- Crond logs (cron job)
tail -n 20 /var/log/maillog	- Mail server logs
tail -n 20 /var/log/qmail/	- Qmail log directory (more files inside this directory)
tail -n 20 /var/log/apache2/access.log	-Apache access and error logs directory
tail -n 20 /var/log/apache2/error.log	-Apache access and error logs directory
tail -n 20 /var/log/apache2/other_vhosts_access.log	-Apache access and error logs directory
tail -n 20 /var/log/lighttpd -Lighttpd access and error logs directory
tail -n 20 /var/log/boot.log	-System boot log
tail -n 20 /var/log/mysqld.log	-MySQL database server log file
tail -n 20 /var/log/secure	-Authentication log
tail -n 20 /var/log/yum.log	-Yum log files
tail -n 20 /var/log/utmp   -Login records file
tail -n 20 /var/log/wtmp  -Login records file

grep cron /var/log/syslog  - история запуска по cron

Boot log / Лог загрузки

 
Лог загрузки Debian Lenny
Иногда необходимо внимательно почитать информацию которая выводиться при загрузке системы. 
Сделать это можно двумя простыми способами:

1. Во время загрузки нажмите комбинацию клавиш
Ctrl + S
вывод будет приостановлен
для продолжения загрузки нажмите комбинацию
Ctrl + Q

2. Активировать запись лога и читать его после загрузки
Отредактируем файл bootlogd
su
sed -i 's/No/Yes/' /etc/default/bootlogd

Разрешим пользователю читать логи, где MyUser ваш логин:
usermod -aG adm MyUser
reboot

Читаем лог:
more /var/log/boot
less /var/log/boot

чистим логи:

 
редактируются обычным редактором
/var/log/messages - что делал юзер
/var/adm/messages - что делал юзер
/var/log  -демоны

редактируются командами
/var/log/wtmp - время сколько проработал юзер
/var/run/utmp - время сколько проработал юзер

вот такими командами
echo -ne > /var/log/wtmp
echo -ne > /var/run/utmp
.bash_history находиться в домашнем каталоге юзера
.mc/history находиться в домашнем каталоге юзера

cat /dev/null > /var/log/* - чистка лога

Доп:

grep francois myfile.txt - показывает строки, содержащие слово francois из файла myfile.txt
grep 404 /var/log/httpd/access_log - показывает	строки, содержащие 
                                     число 404 из /var/log/httpd/access_log
ps auwx	| grep init - показывает строки init из выхода ps
ps auwx	| grep "\[*\]" - показывает команды, заключенные в скобки
dmesg |	grep "[ ]ata\|^ata" - показывает информацию об устройстве ядра ata
grep -Rl Virtual Host /etc/httpd/conf* - показывает строки Virtual Host
grep -v 200 /var/log/httpd/access_log* - отображает строки, не содержащие число 200
ps auwx | grep "[i]nit" -  процесс grep показан не будет

tail -n 15 myfile.txt - отображает последние 15 строк файла
tail -15 myfile.txt - выводит последние 15 строк файла
ps auwx | tail -n 15 - отображает последние 15 строк выхода команды ps
tail -f /var/log/messages - просматривает системные сообщения в режиме реального времени
tail -f /var/1og/maillog - просматривает сообщения почтового севера в режиме реального времени
tail -f /var/1og/httpd/access_log - просматривает сообщения веб-сервера 
                                    в режиме реального времени

wc -позволяет подсчитывать количество полученных строк, слов, байт в файле
grep 192.198.1.1 /var/log/httpd/access-log | wc -l - отображает количество записей конкретного
                                                     IP-адреса в файле журнала Apache
wc /var/log/dmesg - отображает счетчики для одного файла
wc /var/log/*.log - отображает отдельные значения для каждого файла 
                    и общие для всех файлов
                    
Вы можите просматривать любой журнал логов вручную(cat, vi, nano, tail, less)
Однако установив пакет logwatch, вы будете получать более существенную информацию
из журнала файлов в почтовый ящик root(etc/cron.daily/0logwatch - настройки  отправки)

Рубрики
CentOS syslog \ rsyslog \ zabbix

CentOS \ zabbix \ rsyslog \ loganalyzer

CentOS 7:

yum update - получить список обновлений 
yum upgrade - обновить пакеты 
yum -y install epel-release - добавить репозиторий epel
yum provides "*bin/top" - найти пакет, который содержит файл
ip addr show - показать ip адрес
ps -uax - показать все процессы
iptables -S - действующие правила
ss -tuna - все о соединениях 
_________________________________________

sestatus - проверка включен ли selinux
getsebool -a - показать все доступные правила 
/etc/selinux/config - конфиг selinux
enforsing - принудительный режим
permissive - режим предупреждения
_________________________________________

Отключение Selinux:
vi /etc/selinux/config
#SELINUX=enforcing
SELINUX=disabled
_________________________________________

systemctl disable firewalld - выключаем авто запуск  firewalld
systemctl stop firewalld -  выключаем firewalld 
systemctl - показать все демоны и их статус
firewall-cmd --permanent --list-all - показать все правила 
firewall-cmd --permanent --zone=public --add-port=80/tcp - разрешить порт 80/tcp зона public
firewall-cmd --permanent --zone=public --add-service=http - разрешить порт http зона public
firewall-cmd --permanent --zone=public --add-service=https - разрешить порт https зона public
firewall-cmd --permanent --zone=public --add-port=2234/tcp - разрешить порт 2234/tcp зона public
firewall-cmd --zone=public --add-port=5059-5061/udp - разрешить диапазон портов 5059-5061/udp
firewall-cmd --permanent --add-port=3128/tcp  - разрешить порт 3128/tcp
firewall-cmd --permanent --add-port=514/tcp  - разрешить порт 514/tcp
firewall-cmd --permanent --add-port=514/udp - разрешить порт 514/udp
firewall-cmd --permanent --add-port=http/tcp - разрешить порт http/tcp
firewall-cmd --permanent --add-port=https/tcp - разрешить порт https/tcp
firewall-cmd --permanent --add-port=ssh/tcp - разрешить порт ssh/tcp
firewall-cmd --reload - перезагрузить и применить изменения
_________________________________________

systemctl status rsyslog - посмотреть статус rsyslog
systemctl start httpd - запустить httpd
systemctl enable httpd - включить автозагрузку httpd
systemctl kill mysql - убить службу
systemctl reload httpd - перезагружаем веб сервер
_________________________________________

sysctl -a - показать текущие значения
sysctl -p - принять изменения в sysctl.conf без перезагрузки
sysctl -w net.ipv6.conf.all.disable_ipv6=1 - выключить ipv6
sysctl -w net.ipv6.conf.default.disable_ipv6=1 - выключить ipv6
_________________________________________

timedatectl set-timezone Europe/Moscow - установить временную зону Europe/Moscow
_________________________________________

hostnamectl set-hostname Your-New-Host-Name-Here - задать имя пк

LAMP:

yum -y install httpd - ставим вебсервер apache
yum -y install httpd-tools - ставим тулзы для httpd
systemctl enable httpd.service - включить автозагрузку httpd
systemctl start httpd.service - запустить 
yum -y install php - ставим php 
yum -y install php-mysql php-common php-mbstring php-gd php-ldap php-odbc php-pear php-xml php-soap php-xmlrpc php-snmp php-mcrypt php-devel php-xml curl curl-devel - ставим модули для php
yum -y install wget.x86_64
yum -y install mariadb-server mariadb mariadb-devel - установка mariadb.service
systemctl enable mariadb.service - включить автозагрузку mariadb.service
systemctl start mariadb.service - запустить mariadb.service
_________________________________________

vi /etc/my.cnf -файл основных настроек
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
symbolic-links=0
[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid
#add
bind-address=127.0.0.1
character-set-server=utf8
_________________________________________

mysql_secure_installation - команда начальной настройки (пароль для рута) 
Set root password? [Y/n] y - ставим пароль
Remove anonymous users? [Y/n] y - убрать анонимусов
Disallow root login remotely? [Y/n] y - отключить вход рутом из сети
Remove test database and access to it? [Y/n] y - удалить тест базу
Reload privilege tables now? [Y/n] y - обновить привилегии
systemctl reload mariadb.service - перезапустить mariadb.service
_________________________________________

yum -y install phpmyadmin - установка phpMyAdmin

nano /etc/httpd/conf.d/phpMyAdmin.conf
-----------------------CUT---------------------------- 

   AddDefaultCharset UTF-8
   
     # Apache 2.4
     
       Require ip 127.0.0.1 - разрешаем подключения с IP
       Require ip 10.0.0.0/24 - разрешаем подключения с IP
     
   
   
     # Apache 2.2
     Order Deny,Allow
     Deny from All
     Allow from 127.0.0.1 - разрешаем подключения с IP
     Allow from 10.0.0.0/24 - разрешаем подключения с IP
    


   
     # Apache 2.4
     
       Require ip 127.0.0.1 - разрешаем подключения с IP
       Require ip 10.0.0.0/24 - разрешаем подключения с IP
     
   
   
     # Apache 2.2
     Order Deny,Allow
     Deny from All
     Allow from 127.0.0.1 - разрешаем подключения с IP
     Allow from 10.0.0.0/24 - разрешаем подключения с IP
     

-----------------------CUT---------------------------- 

_________________________________________

rsyslog:

!!! В centOS 7 rsyslog уже установлен и включен
yum install -y rsyslog-mysql.x86_64 rsyslog-doc.x86_64 - дополнительные файлы
systemctl status rsyslog - проверяем состояние rsyslog
systemctl start rsyslog - запускаем rsyslog
systemctl enable rsyslog - включаем автозагрузку для rsyslog
mysql -u root -p < /usr/share/doc/rsyslog-8.24.0/mysql-createDB.sql - создадим базу 
_________________________________________
/etc/rsyslog.conf - файл настроек rsyslog
# Provides UDP syslog reception
$ModLoad imudp - найти и раскомментировать
$UDPServerRun 514 - найти и раскомментировать
# Provides TCP syslog reception 
$ModLoad imtcp - найти и раскомментировать
$InputTCPServerRun 514 - найти и раскомментировать

# Load the MeSQL Module
module(load="ommysql")
*.* :ommysql:127.0.0.1,Syslog,rsyslogdbadmin,пароль_PasswordHere - настраиваем выгрузку в базу Syslog

_________________________________________
mysql -u root -p Syslog - подключаемся к базе Syslog
GRANT ALL ON Syslog.* TO rsyslogdbadmin@localhost IDENTIFIED BY 'PasswordHere';
FLUSH PRIVILEGES;
exit
_________________________________________
	
mysql -u rsyslogdbadmin -p Syslog - проверим разрешения для пользователя rsyslogdbadmin
_________________________________________

Создаем пустую базу loganalyzer:

mysql -u root -p - открываем консоль mysql
CREATE DATABASE loganalyzer; - создать базу 
GRANT ALL PRIVILEGES ON loganalyzer.* TO 'loganalyzer'@'localhost' IDENTIFIED BY 'log_password'; - создать нового пользователя и дать ему доступ
flush privileges; - применим привилегии

loganalyzer:

http://loganalyzer.adiscon.com/tag/download/ - страница дистрибутива
cd /var/www - переходим в каталог /var/www
wget http://download.adiscon.com/loganalyzer/loganalyzer-4.1.5.tar.gz - скачиваем loganalyzer
tar zxvf loganalyzer-4.1.5.tar.gz - распаковываем
cd loganalyzer-4.1.5 - входим в только что распакованный каталог 
cp -r src/ /var/www/html/loganalyzer - копируем дистрибутив loganalyzer 
cp -r contrib/* /var/www/html/loganalyzer/ - копируем дистрибутив loganalyzer 
cd /var/www/html/loganalyzer/ - переходим в каталог /var/www/html/loganalyzer/
rm configure.sh secure.sh - удаляем выполнение файлов configure.sh secure.sh
touch config.php - создаем файл конфигурации
chmod 777 config.php - даем полные права на редактирование
Входим веб клиентом на http://ip_server/loganalyzer и настраиваем:
------------------------------------------------------
1. создаем базу для loganalyzer
2. очистим файл конфигурации /etc/loganalyzer/config.php
3. Теперь мы можем установить loganalyzer со своими настройками
в браузере откроем http://server_name/loganalyzer/install.php
Step 1 - жмем next
Step 2 - жмем next
Step 3 Basic configuration - заполняем (рекомендую создать свою базу loganalyzer)
------------------------------------------------------
database host     - localhost
database port     - 3306
database name     - loganalyzer
databasr user     - loganalyzer
table prefix      - пофиг
database password - наш пароль
Require user to be logged in - yes (позволит создать пароль для входа)
------------------------------------------------------
Step 4 Create tables - создать таблицы для loganalyzer
Step 5 - тут нам напишут удалось или нет
Step 6 Create The Main Useraccount - создаем пользователя для логина
Step 7 Create the first source for syslog messages - Подключаем базу с логами  
cat  /etc/rsyslog.conf - если требуется смотрим  rsyslog параметры базы
------------------------------------------------------
source name        - Любое
source type        - MYSQL Native
select view        - Syslog Fields
table type         - MonitorWare
database host      - localhost
database port      - 3306
database name      - Syslog
database tablename - SystemEvents
databasr user      - rsyslogdbadmin
database password  - наш пароль
------------------------------------------------------
Admin Center -> Preferences -> Default character encoding -> UTF8 	
_________________________________________
chmod 644 config.php - убираем права

zabbix:

###zabbix22-server-mysql.x86_64 zabbix22-web-mysql.noarch - в  репозитории CentOS7  версия 2.2 :) ее мы ставить не будем ....
###https://www.zabbix.com/download?zabbix=4.2&os_distribution=red_hat_enterprise_linux&os_version=7&db=mysql
________________________________________
rpm -ivh http://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/zabbix-release-3.4-1.el7.centos.noarch.rpm - добавляем репозиторий
yum install zabbix-server-mysql zabbix-web-mysql - ставим из добавленного репозитория 3.4
________________________________________

Создаем базу и заполняем ее:
mysql -u root -p - открываем консоль mysql
create database zabbix character set utf8; - создаем базу и установим кодировку utf8
GRANT ALL PRIVILEGES ON zabbix.* TO 'zabbix'@'localhost' IDENTIFIED BY 'Пароль'; - создать нового пользователя и дать ему доступ
flush privileges; - применим привилегии
exit; - выходим из mysql
________________________________________
!!! Внимание каталог "/usr/share/doc/zabbix-server-mysql-3.?.?" может отличатся из за новой версии.
zcat /usr/share/doc/zabbix-server-mysql-3.4.3/create.sql.gz | mysql -u root -p zabbix - заливаем базу  
________________________________________

nano /etc/zabbix/zabbix_server.conf - конфиг файл для базы
Изменяем строки:
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword= Пароль

_______________________________________
nano /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 Europe/Moscow  - раскоментить и установить правильную timezone
_______________________________________

systemctl reload httpd  - перезапуск веб сервера
systemctl start zabbix-server
systemctl enable zabbix-server
______________________________________

http://ip_or_dns_name/zabbix - админка и первоначальная настройка
Пароль по умолчанию: Admin:zabbix
______________________________________

Установка агента zabbix на CentOS7:

yum install -y zabbix-agent  - установка агента 
systemctl start zabbix-agent - запуск агента 
systemctl enable zabbix-agent - добавление в автозагрузку

Установка агента zabbix на debian:

apt update
apt upgrade
apt install zabbix-agent  - установка агента 
systemctl start zabbix-agent - запуск агента 
systemctl enable zabbix-agent - добавление в автозагрузку
nano /etc/zabbix/zabbix_agentd.conf - редактируем и исправляем строки
----------------------------------
Server=192.168.15.246 - ip нашего сервера zabbix
#ServerActive=192.168.15.246 - ip нашего сервера zabbix (активный режим)
Hostname=sdv - имя клиента который подключается к zabbix
----------------------------------
service zabbix-agent stop - останавливаем агент
service zabbix-agent start - запускаем агент

Установка агента zabbix на windows:

0. Качаем agent zabbix для windows 
https://www.zabbix.com/download_agents#tab:34
1. Создаем папку zabbix на диске c:\

2. Распаковываем в нее 4 файла 
zabbix_agentd.exe
zabbix_agentd.win.conf
zabbix_get.exe
zabbix_sender.exe

3. редактируем файл zabbix_agentd.win.conf
------------------------------------------
Server = 192.168.15.246  - ip адрес Zabbix-севера 
Hostname = namehost - имя хоста, на который устанавливаем агент
HostnameItem = PC_NAME - имя хоста, на который устанавливаем агент
LogFile=c:\zabbix\zabbix_agentd.log - указываем место для записи логов в файл
------------------------------------------

4. Переходим в каталог на клиенте
cd c:\zabbix
5. Устанавливаем службу agent-zabbix
zabbix_agentd.exe -c c:\zabbix\zabbix_agentd.conf --install

6.Нужно создать разрешающее правило в Брандмауэре Windows.
Брандмауэр Защитника Windows – Дополнительные параметры – Правило для входящих подключений – Создать правило…

Тип правила: Для порта;
Протоколы и порты: Протокол TCP; Определенные локальные порты: 10050;
Действие: Разрешить подключение;
Профиль: Галочки Доменный, Частный, Публичный;
Имя: Zabbix Agent;

Установка evtsys(rsyslog) клиента для windows

0. Скачиваем:
https://code.google.com/archive/p/eventlog-to-syslog/downloads
1. Устанавливаем:
cmd
copy evtsys.* %systemroot%\system32
%systemroot%\system32\evtsys.exe -i -h hostname_ip -s 240 
net start evtsys

Zabbix ссылки:

https://www.zabbix.com/integrations?cat=os - шаблоны
https://www.zabbix.com/download - различные загрузки
https://www.zabbix.com/manuals - документация