Как написать скрипт на bash для отслеживания изменений в таблице Postgresql?

Как мониторить количество активных пользователей PostgreSQL через Zabbix для отображения на графике? Я пытался настроить UserParameter и добавить скрипт на bashe в Zabbix, но получил ошибку. Возможно ли как-то исправить это или есть другие способы достичь поставленной цели?
  • 28 мая 2024 г. 12:31
Ответы на вопрос 3
Для отслеживания изменений в таблице PostgreSQL с помощью bash скрипта можно использовать инструменты мониторинга баз данных, такие как pg_stat_statements или pg_stat_activity. Например, можно создать bash скрипт, который будет запрашивать информацию о количестве изменений в определенной таблице с помощью SQL-запроса к базе данных и выводить результат в файл или на экран. 

Что касается мониторинга количества активных пользователей PostgreSQL через Zabbix, это можно сделать с помощью UserParameter и скрипта на bash. Вот пример скрипта:

```bash
#!/bin/bash

PGUSER="username"
PGPASSWORD="password"
PGHOST="localhost"
PGDATABASE="dbname"

active_users=$(psql -U $PGUSER -h $PGHOST -d $PGDATABASE -c "SELECT count(*) FROM pg_stat_activity WHERE state = 'active';" -t)
echo $active_users
```

Затем добавьте этот скрипт в конфигурацию Zabbix как UserParameter, например:

```plaintext
UserParameter=active_postgres_users,/path/to/your/script.sh
```

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

Если вы не можете исправить ошибку или ищете другой способ мониторинга, можно также рассмотреть использование специализированных инструментов мониторинга для PostgreSQL, таких как pg_monitor или pgbadger. Эти инструменты предоставляют более широкий набор функциональностей для мониторинга и анализа производительности PostgreSQL.
Не имеет отношения к postgresql. Чисто bash 

DB_NAME = foo - это команда
DB_NAME=foo - это переменная
Как уже написал Melkij - в объявлении переменных окружения не должно быть пробелов рядом со знаком равенства. 
Вот такой попробуй
#!/bin/bash

# Параметры подключения к базе данных

DB_HOST='***'
DB_PORT='****'
DB_NAME='****'
DB_USER='***'
DB_PASS='***'

SQL_QUERY="SELECT COUNT(DISTINCT chat_id) FROM active_list2;"

RESULT=$(psql -h "$DB_HOST" -p "$DB_PORT" -U "$DB_USER" -d "$DB_NAME" -t -c "$SQL_QUERY")

# Удаление пробельных символов
ACTIVE_USERS_COUNT=$(echo "$RESULT" | xargs)

# Печать результата
echo "$ACTIVE_USERS_COUNT"


P.S. не забудь вокруг переменных окружения при подстановке добавить двойные кавычки (могут появиться недопустимые символы)
Похожие вопросы