Search
Write a publication
Pull to refresh

Comments 11

1) а если на сервере несколько БД? у вас же жестко прописано, хотя бы в макрос на уровне хоста в заббиксе нужно перенести

2) жестко прописанный пароль в скрипте? не надо так

Мой вариант с использованием discovery, правда под линукс

userparameter_firebird.conf

UserParameter=firebird.stats_db[*],/etc/zabbix/scripts/firebird_stats.sh $1
UserParameter=firebird.discovery_db,cat /var/zabbix/firebird_db.txt | awk 'BEGIN{printf "{\"data\":["}; {printf c"{\"{#DB}\":\""$0"\" }";c=", "}; END{print "]}"}'

firebird_stats.sh

#!/usr/bin/env bash

SCRIPT_DIR=$(dirname "$0")

. $SCRIPT_DIR/firebird_user.conf

db=$1
#"127.0.0.1:/data/database.fdb"
#echo $db

isql-fb -ch utf8 -user $ISC_USER -pass $ISC_PASSWORD -i $SCRIPT_DIR/firebird_stats.sql $db | egrep -v "RESULT|=="

firebird_stats.sql, запрос сразу выдает все данные в одном столбце в json-формате

SELECT
    '{' ||
       '"pages":'        || db.mon$pages ||','||
       '"page_buffers":' || mon$page_buffers ||','||
       '"db_size":'   || (db.mon$pages * db.mon$page_size ) ||','||
       '"seq_reads":' || r.mon$record_seq_reads ||','||
       '"idx_reads":' || r.mon$record_idx_reads ||','||
       '"record_inserts":'  ||r.mon$record_inserts ||','||
       '"record_updates":'  ||r.mon$record_updates ||','||
       '"record_deletes":'  ||r.mon$record_deletes  ||','||
       '"record_backouts":' ||r.mon$record_backouts ||','||
       '"record_purges":'   ||r.mon$record_purges   ||','||
       '"record_expunges":' ||r.mon$record_expunges ||','||
       '"record_locks":'    ||r.mon$record_locks    ||','||
       '"record_waits":'    ||r.mon$record_waits    ||','||
       '"record_conflicts":'||r.mon$record_conflicts||','||
       '"page_reads":'  ||io.mon$page_reads   ||','||
       '"page_writes":' ||io.mon$page_writes  ||','||
       '"page_fetches":'||io.mon$page_fetches ||','||
       '"page_marks":'  ||io.mon$page_marks ||','||
       '"connections":' ||(select count(*) from mon$attachments) ||','||
       '"memory_used":'      ||mem.mon$memory_used ||','||
       '"memory_allocated":' ||mem.mon$memory_allocated ||','||
       '"max_memory_used":'      ||mem.mon$max_memory_used ||','||
       '"max_memory_allocated":' ||mem.mon$max_memory_allocated ||
    '}' as result
    FROM mon$database db
    left join mon$record_stats r on (db.mon$stat_id = r.mon$stat_id)
    left join mon$io_stats io on (db.mon$stat_id = io.mon$stat_id)
    left join mon$memory_usage mem on (db.mon$stat_id = mem.mon$stat_id);

для каждого хоста соответственно свои содержимое firebird_user.conf

ISC_USER=sysdba
ISC_PASSWORD=masterkey

/var/zabbix/firebird_db.txt

127.0.0.1:/data/database/db.fdb
127.0.0.1:/data/database/tab.fdb
127.0.0.1:/data/database/tab_test.fdb

Согласен что с дискавери будет интереснее если баз много. На счет логина и пароля все конечно же так, естественно их лучше вывести в окружение, но тогда ради этих же целей нужно использовать алиасы а не пути к бд как у вас. И не очень понял зачем тут json?

1) несколько алиасов или полных путей, разницы нет же. Ну и плюс возможность получать инфу из баз с других хостов. Бывает иногда и такое.

127.0.0.1:baza1
127.0.0.1:baza2

2) json считается более правильным форматом для последующего парсинга. В общем и целом дело вкуса. Кто-то привык все значения и через регулярки получать.

Меня одного смущает адовая окаменелость не только данной бд, но и заббикса, 2008 винды и вообще факт работы БД в винде? Убунта кстати тоже старая. Зачем так ?

Убунту старая? Припомните когда вышла следующая LTS версия после 20ой? А забикс очень любит именно LTS и не только забикс. Чем вам не нравится "винда" и FB?

Да, старая. Два года, Карл. "Любит" что это за термин. Если заббикс не работает в современной ОС, то это проблема заббикса. Винда как сервер баз данных (кроме MS SQL) это извращение. Удивительно чтоб вообще работает. Ну а что до FB - я просто ослеп на неделю когда увидел его исходники (ибо пришлось дебажить баги в нём). Ну и подходы у него доставляющие во всех местах. А так - наелся я дерьма с ним. И нет, не не осилил. Осилил. Именно что. Больше не хочу.

Думаю многим будет интересно как вы "дебажили баги", запилите статью на обозрение.

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

С nodata аккуратней будьте. Если элемент станет неподдерживаемый или хост недоступный, этот триггер сработает.

Триггер сработает это лучше чем если промолчит, как бывало с ping

Можно навесить зависимость, тогда не будет гирляндой моргать.

Sign up to leave a comment.

Articles