«Управление доступом к данным в PosgreSQL» и «Zabbix»: разница между страницами

Материал из support.qbpro.ru
(Различия между страницами)
imported>Vix
(Новая страница: «'''Условные обозначения, используемые при описания синтаксиса команд:''' ТЕКСТ ПРОПИСНЫМ…»)
 
imported>Vix
 
Строка 1: Строка 1:
'''Условные обозначения, используемые при описания синтаксиса команд:'''
[[Файл:Zabbix2.png]]
<hr>
== Установка и настройка ==
'''''- Система Debian Jessie (8)'''''


ТЕКСТ ПРОПИСНЫМИ БУКВАМИ - зарезервированные слова.
* '''устанавливаем postgresql''', читать тут [[PostgreSQL]]


Тексткурсивом и строчными буквами - элементы, определяемые пользователем.
* '''устанавливаем необходимые пакеты:'''
echo "deb-src http://repo.zabbix.com/zabbix/3.4/debian stretch main" > /etc/apt/sources.list.d/zabbix.list
wget -O - "http://repo.zabbix.com/zabbix-official-repo.key" | apt-key add -
wget -O - "https://repo.zabbix.com/RPM-GPG-KEY-ZABBIX-79EA5ED4" | apt-key add -
wget -O - "https://repo.zabbix.com/RPM-GPG-KEY-ZABBIX-A14FE591" | apt-key add -
wget -O - "https://repo.zabbix.com/RPM-GPG-KEY-ZABBIX-A14FE591-EL5" | apt-key add -


[текст в квадратных скобках] - необязательный элемент.
apt-get update
apt-get install zabbix-agent zabbix-frontend-php zabbix-proxy-pgsql zabbix-server-pgsql php-fpm nginx


{текст в фигурных скобках} - элемент повторяющийся неопределенное количество раз, включая нулевое.
* '''создаем администратора базы zabbix'''
CREATE USER zabbixadmin WITH PASSWORD 'mypassword';


| - это разделитель «или» для выбора одного из нескольких элементов.
* '''создаем базу данных для zabbix'''
CREATE DATABASE "zabbix"
  WITH OWNER "zabbixadmin"
  ENCODING 'UTF8'
  LC_COLLATE = 'ru_RU.UTF-8'
  LC_CTYPE = 'ru_RU.UTF-8';


* '''даем права на базу администратору'''
GRANT ALL PRIVILEGES ON DATABASE "zabbix" to zabbixadmin;


== Введение ==
* '''теперь необходимо в эту базу загрузить шаблоны и схему (для postgresql)'''
Управление доступом к данным в сервере PostgreSQL осуществляется с помощью нескольких механизмов. Таких как:
zcat /usr/share/zabbix-server-pgsql/{schema,images,data}.sql.gz|psql -h 127.0.0.1 zabbix zabbixadmin
Конфигурационные файлы: postgresql.conf и pghba.conf.  
'''{!}''' - для версии 3.4:
zcat /usr/share/doc/zabbix-server-pgsql/create.sql.gz|psql -h 127.0.0.1 zabbix zabbixadmin


С помощью этих файлов настраивается подключение к серверу Postgres.
* '''настраиваем php-fpm'''
cat /etc/php5/fpm/pool.d/www.conf
....
;listen = /var/run/php5-fpm.sock
listen = 127.0.0.1:9000
....
cat /etc/php5/fpm/php.ini
....
disable_functions = pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,<br>pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,<br>pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,
....
date.timezone = Europe/Moscow
....
max_execution_time = 300
....
post_max_size = 16M
....
always_populate_raw_post_data = -1
....


Управление пользователями и группами - регистрация пользователей и групп, определения права суперпользователя, права создания баз данных, права создания ролей, права наследования родительских прав для пользователей или групп.
* '''(!)''' - возможно '''zabbix''' при первом запуске еще что-то попросит, измените как будет указано.


Определение прав доступа к объектам баз данных для пользователей или групп с помощью SQL команд GRANT и REVOKE.
* '''nginx''' - пример наcтройки для '''zabbix''':


  server {
    listen      10.0.1.40:88;
    server_name zabbix;
    root /home/www/zabbix;
    location / {
        index  index.html index.php;
    }
    location ~* \.(gif|jpg|png)$ {
        expires 30d;
    }
    location ~ \.php$ {
        fastcgi_pass  localhost:9000;
        fastcgi_param SCRIPT_FILENAME
                      $document_root$fastcgi_script_name;
        include      fastcgi_params;
    }
}


* После успешного прохождения первичных настроек Zabbix, сохраните файл настроек в /etc/zabbix/web/zabbix.conf.php
* При первичной регистрации '''login:Admin password:zabbix'''


== Конфигурационный файл pghba.conf ==
==Zabbix-Proxy==
* Пример zabbix_proxy.conf для Sqlite3
ProxyMode=0
Server=IP do zabbix server (master)
ServerPort=10051
Hostname=Nome do proxy que foi criado no Zabbix server, tem quer ser igual
LogFile=/var/log/zabbix/zabbix_proxy.log
LogFileSize=100
DebugLevel=3
PidFile=/var/log/zabbix/zabbix_proxy.pid
DBName=/var/lib/sqlite/zabbix.db # SQLite não vai pedir usuário ou senha
DBSocket=/var/lib/mysql/mysql.sock
ProxyLocalBuffer=1
ProxyOfflineBuffer=1
HeartbeatFrequency=60
ConfigFrequency=60
DataSenderFrequency=60
StartPollers=65
StartPollersUnreachable=15
StartPingers=60
StartDiscoverers=35
StartHTTPPollers=5
HousekeepingFrequency=1
CacheSize=20M
StartDBSyncers=8
HistoryCacheSize=20M
HistoryTextCacheSize=32M
Timeout=15
UnreachablePeriod=45
UnavailableDelay=60
UnreachableDelay=15
FpingLocation=/usr/sbin/fping
LogSlowQueries=2
StartIPMIPollers=0
StartJavaPollers=0
StartVMwareCollectors=0
VMwareFrequency=60
StartSNMPTrapper=0
* [https://www.vivaolinux.com.br/dica/Zabbix-Proxy-com-SQLite-3 взято тут]


В конфигурационном файле сервера pghba.conf устанавливается доступ на уровне хоста. Этим файлом определяются все возможные подключения к серверу. А именно, какие пользователи, с каких компьютеров и к каким базам имеют доступ. Так же определяется каким образом осуществляется обмен данными для каждого подключения: используются ли пароли, используется ли шифрование данных.
=='''Полезные советы'''==
* '''Проблема:''' Триггер с элементом vm.memory.size
Пытаюсь мониторить переполнение RAM (если меньше 10% свободной RAM в течении 5 минут) и создаю триггер:
{hostname:vm.memory.size[available].last(5m)}<10
Однако ничего не происходит.


Синтаксис файла pghba.config должен удовлетворять ряду правил. В каждой строке файла находится одна хостовая запись. Перенос записи на другую строку не разрешается. Каждая запись состоит из нескольких полей, разделенных пробелами или знаками табуляции. Количество полей определяется типом хостовой записи и способом задания адреса. Тип хостовой записи определяется первым ключевым словом и может быть 4 видов. Коментарии должны начинаться с символа #.
* '''Решение:'''
Вам для вашей задачи лучше использовать функцию max()
{hostname:vm.memory.size[pavailable].max(5m)}<10
* [https://www.zabbix.com/forum/in-russian/46020-%D0%A2%D1%80%D0%B8%D0%B3%D0%B3%D0%B5%D1%80-%D1%81-%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%BE%D0%BC-vm-memory-size источник]
  '''Пример:''' {Zabbix server:vm.memory.size[available].max(5m)}<10
<hr>


'''Формат строки файла pg_hba:'''
* '''Проблема:''' Если постоянно выскакивает предупреждение на триггер Disk I/O is overloaded on
{Zabbix server:system.cpu.util[,iowait].last(0)}>20
Получается, что ожидает операции ввода.вывода более 20 сек ?


local database user auth-method [auth-option]
* '''Решение:''' Cоветую увеличить интервал и также путем увелечинеия памяти!
  host database user CIDR-address auth-method [auth-option]
  [https://www.zabbix.com/forum/zabbix-help/36397-disk-i-o-is-overloaded-on-zabbix-server/page2?t=44382&highlight=Disk+I/O+overloaded&page=2 Вот здесь совет]
hostssl database user CIDR-address auth-method [auth-option]
  Пример: {Zabbix server:system.cpu.util[,iowait].avg(5m)}>30
hostnossl database user CIDR-address auth-method [auth-option]
<hr>
host database user IP-address IP-mask auth-method [auth-option]
  hostssl database user IP-address IP-mask auth-method [auth-option]
hostnossl database user IP-address IP-mask auth-method [auth-option]


* '''Проблема:''' Zabbix discoverer processes more than 75% busy
 
* '''Решение:''' Этот процесс используется при обнаружении устройств в сети.
Проверьте и в случае необходимости, подправьте настройки правил обнаружения или увеличьте количество процессов которые
занимаются обнаружением новых устройств (параметр StartDiscoverers в конфиг файле zabbix сервера).
К пингу этот процесс и триггер отношения не имеют.
Если не нужен, то и не запускайте обнаружения. Если нужен, то поставьте 2. Посмотрите на графике динамику изменения.
Если всё равно нагрузка будет большая, поставьте 3. Ну и так далее.
<hr>


'''1. Первое ключевое слово определяет тип подключения и соответственно тип хостовой записи:'''
* Проблема: zabbix win 7  cannot make counterpath for "\\": [0xC0000BBD] Обязательный аргумент пропущен или указан неправильно.
* Решение:
cmd
lodctr /r
* взято [https://serveradmin.ru/zabbix-init_cpu_collector-cannot-make-counterpath/ тут]
<hr>


'''local''' - для клиентских подключений с того же компьютера, на котором работает сервер
'''* Проблема:''' fping failed: /usr/bin/fping: can't create socket (must run as root?) : Permission denied <br>
'''* Решение:'''
  chown root:zabbix /usr/bin/fping 
  chmod 710 /usr/bin/fping 
  chmod ug+s /usr/bin/fping


'''host''' - сетевое подключение
* взято [https://ip-connection.blogspot.com/2016/11/zabbix-fping-cant-create-socket-must.html тут]
<hr>


'''hostssl''' - для подключений локальных или удаленных хостов к серверу, с использованием ssl протокола, обеспечивающим шифрование всех взаимодействий с сервером.
==Использование SpeedTest-Cli вместе с Zabbix==
В этой статье я продемонстрирую, как мы можем использовать скрипты в Zabbix через UserParameter. Я буду использовать SpeedTest-cli в качестве примера, для выполнения тестов скорости загрузки интернет канала.
Мы будем использовать UserParameter, он используется, когда нам нужна информация, которую сам zabbix не предоставляет, мы можем использовать команды и скрипты, не беспокоясь о том, поддерживает ли их zabbix, мы можем создавать собственные ключи.


Протокол ssl должен поддерживаться как клиентом, так и сервером.
Выполнение установки SpeedTest-Cli
    sudo apt-get install speetest-cli
Выполним простой тест, показывающий только пинг, скорость загрузки и отдачи, а также сохраним в файл TXT.<br>
Для этого выполним:
speedtest-cli ---bytes ---simple > /tmp/speed.txt
xak@zabbix-new:~$ speedtest-cli ---bytes ---simple > /tmp/speed.txt
xak@zabbix-new:~$ cat /tmp/speed.txt
Ping: 1.692 ms
Download: 10.56 Mbyte/s
Upload: 11.46 Mbyte/s


'''2. Второй параметр database обозначает базы данных, к которым можно подключаться:'''
В данном примере скорость измеряется с ближайшим сервером, вызвав справку
speedtest –help
Вы можете сменить сервер для проверки на нужный.<br>
* Создание графика выполнения скриптов:<br>
Поскольку сценарий имеет довольно большую задержку, около 50 секунд для генерации результатов, мы не могли просто запустить его с zabbix и получить результаты. Zabbix имеет 30-секундный тайм-аут для внешних скриптов. Таким образом, один из способов, который я нашел, заключается в том, чтобы запланировать выполнение скрипта через Crontab. Я рекомендую прочитать немного больше о [http://help.ubuntu.ru/wiki/cron Crontab] или [https://crontab.guru/ тут].
/etc/crontab: system-wide crontab
Unlike any other crontab you don’t have to run the `crontab’
command to install the new version when you edit this file
and files in /etc/cron.d. These files also have username fields,
that none of the other crontabs do.SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin# m h dom mon dow user command
17 * * * * root cd / && run-parts ---report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts ---report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts ---report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts ---report /etc/cron.monthly )
*/20 * * * * root /usr/bin/speedtest-cli ---simple > /tmp/speed.txt


'''all''' - для разрешения подключения ко всем базам данных.
Поскольку speedtest использует пропускную способность интернета для выполнения тестов, не стоит его запускать сильно часто, в данном примере я настроил запуск каждые 20мин.
* Создание UserParameter
Поскольку скрипт speedtest устанавливается на самом zabbix, нам нужно будет настроить UserParameter в собственном агенте Zabbix Server. Добавьте следующие строки в
/etc/zabbix/zabbix-agentd.conf:


'''sameuser''' - для разрешения подключения только к базе данных имя которой совпадает с именем пользователя.
UserParameter=upload[*],cat /tmp/speed.txt | grep «Upload:» | cut -d » » -f2
UserParameter=download[*],cat /tmp/speed.txt | grep «Download:» | cut -d » » -f2


Имя базы данных или список баз данных, разделенный запятыми - для разрешения подключения к конкретной базе данных.
Выполните описанную выше процедуру, перезапустите агент zabbix<br>
Используйте zabbixget, чтобы проверить, работает ли ключ.
xak@zabbix-new:~$ zabbix_get -s 127.0.0.1 -p 10050 -k «download» && zabbix_get -s 127.0.0.1 -p 10050 -k «upload»
87.31
33.98
Наш UserParameter работает правильно.


'''user''' - имена пользователей или групп, которым разрешается подключение с этого компьютера:
* Создание элемента данных в Zabbix
В ключе определяем ключ, который мы создали в агенте.<br>
В окне Интервал обновления укажите 20-30мин<br>
Вы можете найти больше о пользовательских интервалах [https://www.zabbix.com/documentation/3.4/ru/manual/config/items/item/custom_intervals здесь].


'''all''' - все пользователи
Повторяем действия для upload:


имя пользователя - имя конкретного пользователя +имя группы - имя группы
Создание элемента данных в Zabbix
В ключе определяем ключ, который мы создали в агенте.
В окне Интервал обновления укажите 20-30мин
Вы можете найти больше о пользовательских интервалах здесь.


список пользователей и групп, разделенный запятыми
Повторяем действия для upload
Дождитесь появления запланированного обновления в Zabbix.


'''3. CIDR-address или IP адрес и IP маска - адрес хоста.'''


'''4. Тип аутентификации:'''
*trust
*reject
*md5
*crypt
*password
*krb5
*ident
*idap
*pam


'''6. Опции, в зависимости от типа аутентификации.'''
'''ИСТОЧНИКИ:'''
 
<hr>
Подробнее можно почитать в самом файле pg_hba или в документации к postgres [1] в разделе Server administration - Client authentication
* [http://it.rdcm.com/archives/category/monitoring Рубрика: Monitoring]
Пример:  
* [https://serveradmin.ru/ustanovka-i-nastroyka-zabbix-3-4-na-debian-9/#_Zabbix_34_Debian_9 Установка сервера Zabbix 3.4 на Debian 9]
host all «postgres» 127.0.0.1/32 md5
* [https://blog.vpsville.ru/blog/pro/61.html Установка службы Zabbix - агент на Windows сервер.]
Данная запись разрешает подключение пользователю postgres ко всем базам данных, причем пользователь postgres может подключаться только с локального адреса (127.0.0.1). Метод md5 означает, что обязательно использование пароля при установлении подключения. Тоже самое можно было бы задать и с помощью такой строки в pg_hba.config: local all «postgres» md5
* [http://jakondo.ru/ustanovka-i-nastrojka-zabbix-agentov-na-os-windows-i-linux-ubuntu-debian/ Установка и настройка Zabbix агентов на ОС Windows и Linux (Ubuntu, Debian)]
 
* [http://www.ekzorchik.ru/2015/01/install-zabbix-agent-on-windows-7/ Установить Zabbix агент на Windows 7]
 
* [http://www.ekzorchik.ru/2015/01/how-to-install-zabbix-agent-on-windows-xp/ Как установить Zabbix агент на Windows XP]
 
* [http://www.suiviperf.com/zabbix/ '''ZABBIX AGENT installers''']
== Регистрация пользователя на сервере ==
* [https://www.zabbix.com/documentation/3.0/ru/manual/quickstart/notification Получение оповещения о проблеме]
 
* [https://serveradmin.ru/nastroyka-email-opoveshheniy-v-zabbix/ Отправка email уведомлений в zabbix 2.4]
Подключиться к серверу может только пользователь, имеющий учетную запись на сервере. Учетная запись на сервере создается в результате создания пользователя. В процессе аутентификации сервер postgres проверяет был ли зарегистрирован пользователь на сервере и правильно ли введен пароль.
* [https://habrahabr.ru/company/zabbix/blog/193472/ Zabbix тюнинг]
'''Для регистрации пользователя используется команда CREATE USER''' [1]. Синтаксис команды
* [http://blog.files.dp.ua/zabbix-trigger Решение проблем с триггерами processes more than 75% busy]
CREATE USER: CREATE USER name [[WITH] option [...]]
* [http://linux-notes.org/optimizatsiya-nastroek-zabbix/ Оптимизация настроек Zabbix]
где option может быть:
* [https://glaber.io/ '''Fork Zabbix - оптимизированный для снижения нагрузки CPU и повышения кластеризации''']
 
* [https://github.com/burner1024/zabbix-sql/blob/master/delete-old-data.pg.sql Скрипты чистки базы zabbix]
SUPERUSER
| NOSUPERUSER
| CREATEDB
| NOCREATEDB
| CREATEROLE
| NOCREATEROLE
| CREATEUSER
| NOCREATEUSER
| INHERIT
| NOINHERIT
| LOGIN
| NOLOGIN
| CONNECTION LIMIT connlimit  [ ENCRYPTED | UNENCRYPTED ] PASSWORD 'password'
| VALID UNTIL 'timestamp'
| IN ROLE rolename [, ...]
| IN GROUP rolename [, ...]
| ROLE rolename [, ...]
| ADMIN rolename [, ...]
| USER rolename [, ...]
| SYSID uid
 
Так же пользователь может быть создан с использованием сценария createuser [2]. Для этого нужно в командной строке запустить файл createuser.exe. Этот файл находится в директории Program
 
FilesPostgreSQL8.2bin. Команда createuser выполняется с аргументами. Если аргументы не заданы первоначально, то они будут запрошены самой командой в процессе выполнения.
 
Пользователи и группы существуют как глобальные объекты баз данных, а это значит, что они не связаны с какой-то конкретной базой данных [2].
 
Учетные записи пользователей определяют кому разрешено выполнение определенных действий в системе (а так же каких именно действий).
 
Группы существуют как вспомогательное средство, упрощающее представление этих прав.
 
Каждому пользователю postgres создается внутренний системный идентификатор sysid и пароль. Пароль не всегда обязателен - это настраивается в конфигурационном файле pg_hba.conf. Системный идентификатор связывает объекты базы данных с владельцем.
 
'''Владелец''' - это пользователь, которому разрешено предоставлять и отзывать права доступа к объекту.
При создании учетной записи пользователю предоставляются глобальные права - права на создание баз данных, права на создание других пользователей или права суперпользователя.
 
'''Суперпользователь''' - это пользователь, обладающий всеми правами во всех базах данных, включая право создания других пользователей. Глобальные права могут быть в любой момент изменены текущим суперпользователем.
 
В Postgres по умолчанию создается один суперпользователь postgres. Все остальные пользователи создаются этим пользователем или другими пользователями, созданными позже.
 
Вся информация о пользователях, включая пароли, находится в системной таблице pg_shadow. Выборку из этой таблицы может делать только супер пользователь.
 
Для обычных пользователей информация об учетных записях (без паролей) хранится в таблице pg_user.
 
Суперпользователь может удалить из системы любого пользователя, за исключением тех случаев, когда пользователь явно указан, как владелец какого-либо объекта базы данных или когда его имя указано при назначении привилегией для какого-либо объекта.
 
Группы (роли) упрощают процедуру назначения прав пользователям. Так как достаточно дать необходимые права группе, а затем просто добавлять в нее пользователей.
 
Не допускается совпадение имен пользователей и групп (ролей).
 
Группу может создать пользователь у которого есть права на создание ролей (CREATEROLE).
 
Пользователь не может создать группу или пользователя, обладающими большими правами, чем он сам.
 
'''Для создания группы используется команда CREATE ROLE.''' Синтаксис команды:
CREATE ROLE name [ [ WITH ] option [ ... ] ]
где option может быть:
SUPERUSER
| NOSUPERUSER
| CREATEDB
| NOCREATEDB
| CREATEROLE
| NOCREATEROLE
| CREATEUSER
| NOCREATEUSER
| INHERIT | NOINHERIT
| LOGIN | NOLOGIN
| CONNECTION LIMIT connlimit
| [ ENCRYPTED | UNENCRYPTED ] PASSWORD 'password'
| VALID UNTIL 'timestamp'
| IN ROLE rolename [, ...]
| IN GROUP rolename [, ...]
| ROLE rolename [, ...]
| ADMIN rolename [, ...]
| USER rolename [, ...]
| SYSID uid
 
'''Для добавления пользователя в группу используется команда ALTER GROUP.''' Синтаксис команды:
ALTER GROUP groupname ADD USER username [, ... ]
'''Для удаления пользователя из группы:'''
ALTER GROUP groupname DROP USER username [, ... ]
'''Для переименования группы:'''
ALTER GROUP groupname RENAME TO newname
 
 
 
== Предоставление привилегий ==
 
Хотя к базе данных может подключиться любой пользователь, зарегистрированный на сервере, при наличии соответствующих настроек в pg_hba.conf, для получения доступа к объектам базы данных необходимо обладать специальными привилегиями к этим объектам.
 
В postgres учет привилегий ведется при помощи списков управления доступом (ACL - Access Control List).
 
Информация, хранящаяся в списках, указывает каким пользователям разрешена выборка, обновления и другие способы модификации какого-либо объекта базы данных.
 
Таким образом для каждого объекта существует набор привилегий и ограничений доступа.
 
По умолчанию пользователь не имеет доступа к объектам, если они ему не принадлежат и если он не является суперпользователем.
 
Команда для установки привилегий - GRANT.
 
Команда для установки ограничений - REVOKE.
 
'''Привилегии для объектов:'''
*SELECT - выборка данных
*INSERT - добавление, удаление данных
*UPDATE - модификация объекта
*DELETE - удаление объекта
*REFERENCES - ссылка на таблицу
*TRIGGER - создание триггеров
*ALL - включает в себя все выше перечисленные
*WITH GRANT OPTION - опция, позволяющая пользователю наделять других пользователей привилегиями к этому объекту, но не более тех, которыми он обладает сам.
 
Привилегии для объектов устанавливают или изменяют суперпользователи, владельцы объектов или пользователи, которым выданы привилегии к объекту с опцией WITH GRANT OPTION.
 
Команда GRANT имеет 2 базовых варианта:
*привилегии на объекты базы данных (таблицы, представления, последовательности, базу данных, функции, процедурные языки, схему, tablespace).
-привилегии на членство в группе (роли) - в этом варианте команда перенаправляет привилегии роли тому пользователю или группе, которые указаны в команде. Наделение такой привилегией аналогично добавлению пользователя или группы в группу.
 
'''Синтаксис команды GRANT для таблиц и представлений:'''
GRANT { { SELECT | INSERT | UPDATE | DELETE | REFERENCES | TRIGGER } [,...] | ALL [ PRIVILEGES ] } ON [ TABLE ] tablename [, ...] TO { username | GROUP groupname | PUBLIC } [, ...] [ WITH GRANT OPTION ]
Команда REVOKE предназначена для отзыва привилегий, выданных ранее.  
 
'''Синтаксис команды REVOKE для таблиц и представлений:'''
REVOKE [ GRANT OPTION FOR ] { { SELECT | INSERT | UPDATE | DELETE | REFERENCES | TRIGGER } [,...] | ALL [ PRIVILEGES ] } ON [ TABLE ] tablename [, ...] FROM { username | GROUP groupname | PUBLIC } [,...] [ CASCADE | RESTRICT ]
 
Отзыв привилегий для PUBLIC влияет только на группу PUBLIC. Привилегии, выданные персонально (с указанием конкретных имен пользователей или групп) в этом случае остаются.
 
Сводка прав ACL просматривается в psql с помощью команды z. Для того, чтобы посмотреть сводку прав по какому-то конкретному объекту нужно указать его имя после команды z. Например:
сервер: ps-345=> пользователь: z fio
сервер: Привилегии доступа для базы данных «ps-3 4 5» сервер: Схема | Имя | Тип | Привилегии доступа
сервер: Public | fio | таблица | сервер: (1 запись)
 
Всех пользователей и группы можно посмотреть с помощью команды du
 
 
== Про владельцев объектов ==
 
Владельцем объектов может быть пользователь или группа.
 
У каждого объекта базы данных может быть владелец, отличный от владельца базы данных.
 
Владельца объекта можно изменить после создания объекта. Это может сделать либо владелец объекта, либо суперпользователь.
 
Если у базы данных - один владелец, а у некоторого объекта этой базы данных другой, то владельца на этом объекте может сменить, только владелец объекта или суперпользователь и не может - владелец базы данных.
 
Владелец может раздавать привилегии на свой объект и изменять его.

Версия от 15:02, 26 декабря 2019

Zabbix2.png


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

- Система Debian Jessie (8)

  • устанавливаем postgresql, читать тут PostgreSQL
  • устанавливаем необходимые пакеты:
echo "deb-src http://repo.zabbix.com/zabbix/3.4/debian stretch main" > /etc/apt/sources.list.d/zabbix.list
wget -O - "http://repo.zabbix.com/zabbix-official-repo.key" | apt-key add -
wget -O - "https://repo.zabbix.com/RPM-GPG-KEY-ZABBIX-79EA5ED4" | apt-key add -
wget -O - "https://repo.zabbix.com/RPM-GPG-KEY-ZABBIX-A14FE591" | apt-key add -
wget -O - "https://repo.zabbix.com/RPM-GPG-KEY-ZABBIX-A14FE591-EL5" | apt-key add -
apt-get update
apt-get install zabbix-agent zabbix-frontend-php zabbix-proxy-pgsql zabbix-server-pgsql php-fpm nginx
  • создаем администратора базы zabbix
CREATE USER zabbixadmin WITH PASSWORD 'mypassword';
  • создаем базу данных для zabbix
CREATE DATABASE "zabbix"
 WITH OWNER "zabbixadmin"
 ENCODING 'UTF8'
 LC_COLLATE = 'ru_RU.UTF-8'
 LC_CTYPE = 'ru_RU.UTF-8';
  • даем права на базу администратору
GRANT ALL PRIVILEGES ON DATABASE "zabbix" to zabbixadmin;
  • теперь необходимо в эту базу загрузить шаблоны и схему (для postgresql)
zcat /usr/share/zabbix-server-pgsql/{schema,images,data}.sql.gz|psql -h 127.0.0.1 zabbix zabbixadmin

{!} - для версии 3.4:

zcat /usr/share/doc/zabbix-server-pgsql/create.sql.gz|psql -h 127.0.0.1 zabbix zabbixadmin
  • настраиваем php-fpm
cat /etc/php5/fpm/pool.d/www.conf
....
;listen = /var/run/php5-fpm.sock
listen = 127.0.0.1:9000

....

cat /etc/php5/fpm/php.ini
....
disable_functions = pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,
pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,
pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority, .... date.timezone = Europe/Moscow .... max_execution_time = 300 .... post_max_size = 16M .... always_populate_raw_post_data = -1 ....
  • (!) - возможно zabbix при первом запуске еще что-то попросит, измените как будет указано.
  • nginx - пример наcтройки для zabbix:
 server {
    listen      10.0.1.40:88;
    server_name zabbix;
    root /home/www/zabbix;
    location / {
        index   index.html index.php;
    }

    location ~* \.(gif|jpg|png)$ {
        expires 30d;
    }

    location ~ \.php$ {
        fastcgi_pass  localhost:9000;
        fastcgi_param SCRIPT_FILENAME
                      $document_root$fastcgi_script_name;
        include       fastcgi_params;
    } 
}
  • После успешного прохождения первичных настроек Zabbix, сохраните файл настроек в /etc/zabbix/web/zabbix.conf.php
  • При первичной регистрации login:Admin password:zabbix

Zabbix-Proxy

  • Пример zabbix_proxy.conf для Sqlite3
ProxyMode=0
Server=IP do zabbix server (master)
ServerPort=10051
Hostname=Nome do proxy que foi criado no Zabbix server, tem quer ser igual
LogFile=/var/log/zabbix/zabbix_proxy.log
LogFileSize=100
DebugLevel=3
PidFile=/var/log/zabbix/zabbix_proxy.pid
DBName=/var/lib/sqlite/zabbix.db # SQLite não vai pedir usuário ou senha
DBSocket=/var/lib/mysql/mysql.sock
ProxyLocalBuffer=1
ProxyOfflineBuffer=1
HeartbeatFrequency=60
ConfigFrequency=60
DataSenderFrequency=60
StartPollers=65
StartPollersUnreachable=15
StartPingers=60
StartDiscoverers=35
StartHTTPPollers=5
HousekeepingFrequency=1
CacheSize=20M
StartDBSyncers=8
HistoryCacheSize=20M
HistoryTextCacheSize=32M
Timeout=15
UnreachablePeriod=45
UnavailableDelay=60
UnreachableDelay=15
FpingLocation=/usr/sbin/fping
LogSlowQueries=2
StartIPMIPollers=0
StartJavaPollers=0
StartVMwareCollectors=0
VMwareFrequency=60
StartSNMPTrapper=0 

Полезные советы

  • Проблема: Триггер с элементом vm.memory.size
Пытаюсь мониторить переполнение RAM (если меньше 10% свободной RAM в течении 5 минут) и создаю триггер:
{hostname:vm.memory.size[available].last(5m)}<10
Однако ничего не происходит.
  • Решение:
Вам для вашей задачи лучше использовать функцию max()
{hostname:vm.memory.size[pavailable].max(5m)}<10
 Пример: {Zabbix server:vm.memory.size[available].max(5m)}<10

  • Проблема: Если постоянно выскакивает предупреждение на триггер Disk I/O is overloaded on
{Zabbix server:system.cpu.util[,iowait].last(0)}>20
Получается, что ожидает операции ввода.вывода более 20 сек ?
  • Решение: Cоветую увеличить интервал и также путем увелечинеия памяти!
Вот здесь совет
Пример: {Zabbix server:system.cpu.util[,iowait].avg(5m)}>30

  • Проблема: Zabbix discoverer processes more than 75% busy
  • Решение: Этот процесс используется при обнаружении устройств в сети.
Проверьте и в случае необходимости, подправьте настройки правил обнаружения или увеличьте количество процессов которые
занимаются обнаружением новых устройств (параметр StartDiscoverers в конфиг файле zabbix сервера).
К пингу этот процесс и триггер отношения не имеют.
Если не нужен, то и не запускайте обнаружения. Если нужен, то поставьте 2. Посмотрите на графике динамику изменения.
Если всё равно нагрузка будет большая, поставьте 3. Ну и так далее.

  • Проблема: zabbix win 7 cannot make counterpath for "\\": [0xC0000BBD] Обязательный аргумент пропущен или указан неправильно.
  • Решение:
cmd
lodctr /r

* Проблема: fping failed: /usr/bin/fping: can't create socket (must run as root?) : Permission denied
* Решение:

 chown root:zabbix /usr/bin/fping  
 chmod 710 /usr/bin/fping   
 chmod ug+s /usr/bin/fping

Использование SpeedTest-Cli вместе с Zabbix

В этой статье я продемонстрирую, как мы можем использовать скрипты в Zabbix через UserParameter. Я буду использовать SpeedTest-cli в качестве примера, для выполнения тестов скорости загрузки интернет канала. Мы будем использовать UserParameter, он используется, когда нам нужна информация, которую сам zabbix не предоставляет, мы можем использовать команды и скрипты, не беспокоясь о том, поддерживает ли их zabbix, мы можем создавать собственные ключи.

Выполнение установки SpeedTest-Cli

   sudo apt-get install speetest-cli

Выполним простой тест, показывающий только пинг, скорость загрузки и отдачи, а также сохраним в файл TXT.
Для этого выполним:

speedtest-cli ---bytes ---simple > /tmp/speed.txt
xak@zabbix-new:~$ speedtest-cli ---bytes ---simple > /tmp/speed.txt
xak@zabbix-new:~$ cat /tmp/speed.txt
Ping: 1.692 ms
Download: 10.56 Mbyte/s
Upload: 11.46 Mbyte/s

В данном примере скорость измеряется с ближайшим сервером, вызвав справку

speedtest –help

Вы можете сменить сервер для проверки на нужный.

  • Создание графика выполнения скриптов:

Поскольку сценарий имеет довольно большую задержку, около 50 секунд для генерации результатов, мы не могли просто запустить его с zabbix и получить результаты. Zabbix имеет 30-секундный тайм-аут для внешних скриптов. Таким образом, один из способов, который я нашел, заключается в том, чтобы запланировать выполнение скрипта через Crontab. Я рекомендую прочитать немного больше о Crontab или тут.

/etc/crontab: system-wide crontab
Unlike any other crontab you don’t have to run the `crontab’
command to install the new version when you edit this file
and files in /etc/cron.d. These files also have username fields,
that none of the other crontabs do.SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin# m h dom mon dow user command
17 * * * * root cd / && run-parts ---report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts ---report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts ---report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts ---report /etc/cron.monthly )
*/20 * * * * root /usr/bin/speedtest-cli ---simple > /tmp/speed.txt

Поскольку speedtest использует пропускную способность интернета для выполнения тестов, не стоит его запускать сильно часто, в данном примере я настроил запуск каждые 20мин.

  • Создание UserParameter

Поскольку скрипт speedtest устанавливается на самом zabbix, нам нужно будет настроить UserParameter в собственном агенте Zabbix Server. Добавьте следующие строки в

/etc/zabbix/zabbix-agentd.conf:
UserParameter=upload[*],cat /tmp/speed.txt | grep «Upload:» | cut -d » » -f2
UserParameter=download[*],cat /tmp/speed.txt | grep «Download:» | cut -d » » -f2

Выполните описанную выше процедуру, перезапустите агент zabbix
Используйте zabbixget, чтобы проверить, работает ли ключ.

xak@zabbix-new:~$ zabbix_get -s 127.0.0.1 -p 10050 -k «download» && zabbix_get -s 127.0.0.1 -p 10050 -k «upload»
87.31
33.98

Наш UserParameter работает правильно.

  • Создание элемента данных в Zabbix

В ключе определяем ключ, который мы создали в агенте.
В окне Интервал обновления укажите 20-30мин
Вы можете найти больше о пользовательских интервалах здесь.

Повторяем действия для upload:

Создание элемента данных в Zabbix В ключе определяем ключ, который мы создали в агенте. В окне Интервал обновления укажите 20-30мин Вы можете найти больше о пользовательских интервалах здесь.

Повторяем действия для upload Дождитесь появления запланированного обновления в Zabbix.


ИСТОЧНИКИ: