PDA

View Full Version : Данные на русском языке


nitrogear
12-05-2009, 14:39
Через SNMPv2 получаю от устройства строку
SNMPv2-SMI::mib-2.43.16.5.1.2.1.1 = STRING: "Нет бумаги: Лоток 1"
Строка возвращается в юникоде, а в базу записываются такие данные: "??? ??????: ????? 1"
Таблица history_str, куда сохраняются данные имеет такую структура (выгружно pnpMyAdmin'ом):
CREATE TABLE `history_str` (
`itemid` bigint(20) unsigned NOT NULL default '0',
`clock` int(11) NOT NULL default '0',
`value` varchar(255) NOT NULL,
KEY `history_str_1` (`itemid`,`clock`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
В /etc/my.cnf прописано:
[client]
default-character-set=utf8
[mysqld]
init-connect="SET NAMES utf8"
character-set-server=utf8
collation-server=utf8_general_ci
OS: FreeBSD, Zabbix-v1.6.4, mysql-server-5.0.77
Подскажите как сделать чтобы сообщения на русском были читаемы?

dotneft
12-05-2009, 14:57
Поддержки Utf8 еще нет у заббикса:)

soussine
06-07-2009, 11:26
Подскажите как сделать чтобы сообщения на русском были читаемы?

Если еще актуально проверь collate у поля value, д.б. utf-8


ALTER TABLE `history_str` CHANGE `value` `value` VARCHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL

nitrogear
06-07-2009, 12:27
Если еще актуально проверь collate у поля value, д.б. utf-8
ALTER TABLE `history_str` CHANGE `value` `value` VARCHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL
Структура таблицы такая:

CREATE TABLE `history_str` (
`itemid` bigint(20) unsigned NOT NULL default '0',
`clock` int(11) NOT NULL default '0',
`value` varchar(255) NOT NULL,
KEY `history_str_1` (`itemid`,`clock`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Но как и писали выше, поддержки юникода в самих агентах еще нет.

soussine
06-07-2009, 13:18
Структура таблицы такая:

Но как и писали выше, поддержки юникода в самих агентах еще нет.


Перепутал SNMP c zabbix agent.

А в zabbix agent с utf-8 все ок нормально передает.

nitrogear
06-07-2009, 14:20
Перепутал snmp c zabbix agent.
А в zabbix agent с utf-8 все ок нормально передает.
Если локальные данные в юникоде агент отправляет нормально, то наверное он не умеет работать с юникод данными, получаемыми по snmp.

soussine
06-07-2009, 15:47
если локальные данные в юникоде агент отправляет нормально, то наверное он не умеет работать с юникод данными, получаемыми по snmp.

очень даже может быть.
сегодня потестирую.

soussine
06-07-2009, 16:33
Если локальные данные в юникоде агент отправляет нормально, то наверное он не умеет работать с юникод данными, получаемыми по snmp.


результаты тестирования пока получилсь весьма странные.

Тестировал на Ubuntu 8.04.3 LTS

в файле /etc/init.d/snmpd.conf

установил

syslocation Компьютер


и сохранил в utf8 кодировке

snmpwalk вот что дает.

root@ma2dy-laptop:~# snmpwalk -v 1 -c public 127.0.0.1 1.3.6.1.2.1.1.6.0
SNMPv2-MIB::sysLocation.0 = STRING: Компьютер


Т.е. все ок.

Везде стоит кодировка utf8 и в my.cnf тоже.Но у сервера zabbix вроде кодировка прописана в исходном коде.


Вставил item в zabbix.

получил его значение такое.

Компьютер

Уже ничего.
Хоть не вопросы.


А далее самое интересное.

Если сохранить файл в snmpd.conf в кодировке win-1251 то значения в базу будут писаться нормальные, т.е.


Компьютер



Буду дальше разбираться.Надо скомпилить zabbix_server c нуля с известными параметрами "set names XXX" и тестировать дальше.

nitrogear
06-07-2009, 21:11
Ждем результатов - тема очень актуальна

soussine
07-07-2009, 08:34
Ждем результатов - тема очень актуальна

Ок.

Ну с графиками и картами на русском я уже разобрался.
http://www.zabbix.com/forum/showthread.php?t=12227

nitrogear
07-07-2009, 14:27
ок.
ну с графиками и картами на русском я уже разобрался.
http://www.zabbix.com/forum/showthread.php?t=12227
с этим проблем нету ;-)

soussine
07-07-2009, 14:44
с этим проблем нету ;-)

кстати вопрос такой а что за аппарат ты мониторишь по snmp?

nitrogear
07-07-2009, 15:26
кстати вопрос такой а что за аппарат ты мониторишь по snmp?
Мониторю сетевые МФУ Gestetner DSm721 и DSm615. Они отдают в юникоде информацию:
snmpwalk -v1 -c public 10.0.0.44 SNMPv2-SMI::mib-2.43.16.5.1.2.1.1 | iconv -f utf-8 -t koi8-r
SNMPv2-SMI::mib-2.43.16.5.1.2.1.1 = STRING: "Готово"
Пока выкрутился с помощью value maps - настроил для каждого значения из вопросов его расшифровку. Однако это костыль, и хотелось бы решить вопрос "по-человечески".

rav
29-09-2009, 13:50
Имеем следующее:
my.conf

default-character-set=utf8
character-set-server=utf8
init-connect="SET NAMES utf8"

Локаль UTF-8.
Zabbix 1.6.6
Все бы ничего, но письма на e-mail на русском языке приходят в виде вопросов.
Выяснил, что сервер заббикса пишет в базу в непонятной кодировке. Полез ковырять заббикс.
В файле /src/libs/zbxdb/db.c
закомментировал строки:
if (ZBX_DB_OK == ret)
DBexecute("SET CHARACTER SET utf8");
Сервер начал писать в базу нормально. Но заголовки письма приходят в виде XXXXXXXX.
Смотрим дальше.
Нужно закодировать заголовок письма в base64.
В файле /src/libs/zbxemail/email.c вставил кусок в 195-й строке

char *subj_base64=NULL;
char *tmp=NULL;
subj_base64=zbx_malloc(subj_base64,sizeof(char*)*s trlen(mailsubject));
tmp=zbx_malloc(tmp,sizeof(char*)*strlen(mailsubjec t)*2+20);
str_base64_encode(mailsubject,subj_base64,strlen(m ailsubject));
zbx_snprintf(tmp,sizeof(char*)*strlen(mailsubject) *2+19,"=?UTF-8?B?%s?=",subj_base64);


заменил строку

cp = zbx_dsprintf(cp, "From:<%s>\r\nTo:<%s>\r\nDate: %s\r\nSubject: %s\r\n"
"Content-Type: text/plain; charset=\"UTF-8\"\r\n\r\n%s",
smtp_email, mailto, str_time, tmp, mailbody);

что заменил показано жирным
и добавил ниже

zbx_free(tmp);
zbx_free(subj_base64);

Теперь все работает как надо!
Сам в СИ не силен да и времени нет разбираться, возможно сделал неоптимально. Кто силен, доработайте пожалуйста.