Содержание
- Sending failed error cannot convert request contents to utf8
- Zabbix Russian Community
- Отправка уведомлений из Zabbix в Telegram через Webhook
- Can’t POST UTF-8 encoded data #3476
- Comments
- application/json default charset is not UTF-8 when parsing request #384
- Comments
- Python : How to fix Unexpected UTF-8 BOM error when using json.loads
- What is BOM
- What is utf-8-sig?
- Solution 1 — using codecs module
Sending failed error cannot convert request contents to utf8
Виртуальный сервер на SSD — недорого!
Аренда выделенных и виртуальных серверов (VDS/VPS), хостинг, аренда IP-адресов, администрирование, круглосуточная поддержка
Резервное копирование с проверкой на вирусы.
Удобный сервис создания резервных копий на любой сервер сети интернет. Отслеживайте изменения, проверяйте на вирусы. Надежно защитите свой бизнес!
Выбираете сервер? Любая конфигурация на заказ!
Аренда физических серверов любых конфигураций под любые запросы — 1С бухгалтерия, игровые сервера, нагруженные проекты, интернет-магазины!
Никто не пытался в Zabbix 5.* настроить отправку сообщений в телеграм с эмоджи? В тесте всё работает, когда переношу в шаблон сообщений — Sending failed: Error: cannot convert request contents to utf8. В чем причина может быть?
Тестил на Zabbix 5.0 и 5.2
Никто не пытался в Zabbix 5.* настроить отправку сообщений в телеграм с эмоджи? В тесте всё работает, когда переношу в шаблон сообщений — Sending failed: Error: cannot convert request contents to utf8. В чем причина может быть?
Источник
Отправка уведомлений из Zabbix в Telegram через Webhook
Не так давно вышел Zabbix 4.4 в котором появилось много всего интересного. Например, добавлена возможность использования web-хуков и собственных обработчиков действий и уведомлений при выявлении сбоев проверяемых сервисов. Обработчики можно создавать на JavaScript и применять для обращения к внешним службам доставки уведомлений или системами отслеживания ошибок. Например, можно написать обработчик для отправки сообщений о проблемах в корпоративный чат.
В данной статье я расскажу как можно из Zabbix 4.4 (а так же из 5.0) отправлять сообщения в Телеграм без использования дополнительных скриптов.
Исходные данные: Zabbix 4.4
Задача: Сделать отправку уведомлений из Zabbix в Telegram через Webhook
Для того чтобы отправлять сообщения в Телеграм необходим доступ до api.telegram.org на порт 443 с Вашего Zabbix-сервера.
1. Создаем бота у @botfather, официальная инструкция тут
Команда для создания бота /newbot
Далее вводим имя желаемого бота обязательно маленькими буквами и в конце префикс _bot, например: myxxxxxxx_bot
Если имя не занято, то botfather скажет «Done! Congratulations on your new bot» и далее выдаст ссылку на бота, вида: t.me/myxxxxxxx_bot
А так же кроме всего прочего после слов «Use this token to access the HTTP API:» выдаст API-ключ нашего бота, он нам пригодиться дальше.
Нам нужно перейти по ссылке на нашего бота и нажать ЗАПУСТИТЬ или ввести /start, если этого не сделать, то сообщения Вам приходить не будут. Данную ссылку Вы можете давать всем кто будет получать оповещения.
2. Теперь нам нужно узнать собственный идентификатор, чтобы указать его в настройках профиля пользователя в Zabbix
Самый простой способ узнать свой ID — это подключиться к боту @get_id_bot, нажать ЗАПУСТИТЬ и он выдаст вам Ваш ID. Дополнительную информацию о боте можно узнать здесь.
3. Импорт нового способа оповещения:
Открываем Zabbix, переходим в «Администрирование» -> «Способы оповещений», наживаем «Импорт» и выбираем файл zbx_export_mediatypes.xml
У нас появляется новый способ оповещения «Telegram via Webhook», редактируем его и в строку с именем token вводим Ваш API-ключ бота из п.1
Далее Вы можете изменить 3 дополнительных параметра отправки сообщений, это parse_mode, disable_web_page_preview и disable_notification
Параметр parse_mode задает режим разметки сообщений, может иметь значения HTML, Markdown или MarkdownV2, более детально о разметке сообщений можно почитать в официальной документации.
Параметр disable_web_page_preview дает возможность отключить предпросмотр ссылок в сообщениях, может иметь значения true или false. Иногда имеет смысл ставить его в false, выбирать Вам.
Параметр disable_notification дает возможность отключить уведомления о приходе сообщения, может иметь значения true или false.
Параметр HTTPProxy используется только в пропатченой версии zabbix-server v4.4, которая позволяет отправлять сообщения в Телеграм через HTTP-прокси. Не заполняйте это поле в стандартной версии zabbix v4.4! О том как пересобрать zabbix-server с поддержкой HTTPProxy для Web-хуков я описал тут
В Zabbix v5.0 реализована работа вебхуков через прокси и патч не требуется, поэтому Вы можете использовать параметр HTTPProxy и указать в нем адрес прокси-сервера.
Формат параметра HTTPProxy: schema://user:[email protected]:port
где
schema — это протокол, может быть http, https или socks5h
user и password — это логин и пароль пользователя если на прокси используется авторизация (не обязательные поля)
ip — это IP адрес или доменное имя
port — это порт прокси
Пример:
http://123.45.67.89:3128
или
socks5h://vasua:[email protected]:1080
Установленная галочка «Включить запись меню события» (Include event menu entry) позволяет добавлять в алармы на странице «Проблемы» ссылку с именем указанном в поле «Имя записи меню» (Menu entry name) при выборе которой будет открываться страница указанная в «URL записи меню» (Menu entry URL). Поле «URL записи меню» установлено в специально, это позволяет вместе с включенной опцией «Обработка тегов» формировать правильные ссылки на сообщения в чате.
Пример настройки, маркировки тегом и вид меню перехода к сообщению:
Настройки метода оповещения
Пример маркировки тегами и меню перехода к сообщению в Телеграм
Zabbix telegram via webhook test
4. Настройка способа оповещения у пользователя
Теперь перейдите в настройки пользователя который должен получать оповещения, добавьте новое оповещение.
Тип выберите «Telegram via Webhook», в поле «Отправлять на» введите ID пользователя из п.2, пример на картинке ниже:
zabbix telegram via webhook user profile
5. Настройка действий
Теперь можно настроить непосредственно действия по отправке уведомления при наступлении определенных событий, для этого перейдите в Zabbix в «Настройка» -> «Действия», выберите Источник событий — Триггеры и нажмите кнопку «Создать действие».
6. Отладка скрипта отправки и логгирование.
Скрипт отправки написан на JavaScript и ведет полное логгирование действий по отправке на уровне 3 (warning), если Вы откроете стандартный лог-файл Zabbix-server по пути /var/log/zabbix/zabbix_server.log, то увидите примерно такое:
Код ответа 200 означает успешную отправку.
Могут быть и ошибки отправки, пример (указан неправильный ID чата):
или указан неправильный токен:
В отправляемых сообщениях можно использовать эмодзи символы, коды символов смотрим тут, колонка Unicode. Перед кодом нужно использовать обратный слэш для экранирования.
Внимание! Отправка эмодзи с указанием unicode-кода будет работать только в Zabbix v4.4, в 5-й версии Zabbix нужно использовать непосредственно сами картинки, их можно вставлять в нужные места сообщений (смотрите скриншоты ниже).
Пример отправки сообщения с эмодзи в Zabbix v4.4:
Пример отправки сообщения с эмодзи в Zabbix v4.4
Пример отправки сообщения с эмодзи в Zabbix v5:
Пример отправки сообщения с эмодзи в Zabbix v5
На этом все, до скорых встреч.
Если у Вас возникли вопросы или Вы хотите чтобы я помог Вам, то Вы всегда можете связаться со мной разными доступными способами.
Источник
Can’t POST UTF-8 encoded data #3476
I’m using Requests to send data to a Firebase database. Data contained in the JSON file is UTF-8 encoded. I’m sending that data as follows:
But this is sent as «latin-1» text no matter what, because the underlying HTTP client library always sends the body’s text with that encoding.
This results on weird characters displayed on my website.
If instead of:
data_to_send = json.dumps(data).encode(«utf-8»)
or
data_to_send = json.dumps(data, ensure_ascii=False).encode(«utf-8»)
I do this:
data_to_send = json.dumps(data, ensure_ascii=False)
Then, HTTP client library throws this error:
So, how am I supposed to POST UTF-8 encoded data using Requests?
The text was updated successfully, but these errors were encountered:
@Cidadao You’ll need to more explicitly state what your actual problem is. Let me address why.
Firstly, you say you want to POST your JSON as UTF-8 encoded data. Why is this needed? By default, the Python JSON library will automatically escape all non-ASCII unicode code points. For example:
This code produces the same result on Python 2.7, by the way. I mention this because it doesn’t matter if this is encoded in UTF-8 or Latin-1, the exact output will be identical as it uses only ASCII characters.
Your next comment is about apparent problems with data encoding. I cannot reproduce this problem:
This is where I use the same data dictionary as above, containing a whole slew of Chinese characters. Wireshark reveals the posted body as being the byte sequence 7b 22 6b 65 79 22 3a 20 22 e6 81 92 e5 86 99 e4 be a1 e6 99 82 e7 a9 b6 e8 a8 8e e6 98 ad e5 90 8d e4 bc 9a e8 a8 bc e4 bb 95 e7 8e b2 e4 ba 88 e9 82 b8 e5 ba 81 e5 ad 90 e7 ad 89 e5 9b b3 e8 80 85 22 7d , which decodes via UTF-8 to:
So I think I need more information. What does your data look like? What do your headers look like? What Python and Requests version are you using?
Источник
application/json default charset is not UTF-8 when parsing request #384
This is a follow up to #80. Apparently, responses were fixed, but there are still issues with the requests.
Request with Content-Type: application/json is decoded not as UTF-8, while request with Content-Type: application/json; charset=utf-8 is decoded correctly. Both has to behave the same and be decoded as UTF-8.
The text was updated successfully, but these errors were encountered:
It should work properly if you have Gson or Jackson support installed and receiving serializable type so in this case content negotiation and custom converter does handling well. However if you are receiving a string (or receiveText() ) then charsets are always handled according to plain text rules and the default for plain text is ISO-8859-1
It doesn’t work properly, I tried both. Parsing works, however the resulting string values (in a deserialized object) are not correct — they’re not looking right when printed. I assume they’re in ISO-8859-1 , but I didn’t check it.
Just added tests: both Gson and Jackson handle encodings properly however both do not cover receiveText and receive
I was using receive syntax, where MyClass has String fields.
So, is it supposed to work?
I definitely expected for it to just work. I mean, I expected Content-Type: application/json to be enough here for deserialization to switch to proper JSON (with UTF-8 instead of ISO-8859-1 ).
revceive should work, I can’t reproduce it, could you please provide example?
Sure, but not now.
Are you using ktor-client or server-side only ktor?
Server-side only. I use that deserialized object with Apache PDFBox later on to fill in the forms in PDFs.
This is an extract from my code:
Do I use ContentNegotiation and jackson properly?
Actually, this is my whole main fn (simplified):
The error I have occurs deep in the execTask , and the issue there is that Task (a data-class object) have stings that are not encoded in the UTF-8 (if I pass application/json as a Content-Type ).
However, when I pass application/json; charset=utf-8 as a Content-Type , the resulting Task has strings in valid UTF-8 encoding (no error occurs).
Note that the resulting strings with incorrect encoding seem to be binary the same — they’re just getting interpreted incorrectly. This applies to multi-byte characters (Cyrillic symbols in my case).
Источник
Python : How to fix Unexpected UTF-8 BOM error when using json.loads
With Python, it is a really easy to retrieve data from 3rd party API services, so I made a script for this purpose. The script worked without any issue for many different API URLs, but recently, when I wanted to load the server content response from a specific API URL into json.loads method, it threw an «Unexpected UTF-8 BOM» error. In this article, we will examine what the error means and various ways to solve it.
To retrieve the data from 3rd party API service, I use this code in my Python script:
The above code uses requests library to read the data from URL and then it uses json.loads method to deserialize a server’s string response containing JSON data into an object.
Until this particular case, the above code worked just fine, but now I was getting the following error:
The error was caused by the json.loads(r.text) , so I examined the value of r.text , which had this:
The content from server’s response contained the data from the API, but it also had that strange ufeff Unicode character at the beginning. It turns out, the Unicode character with value u+feff (or xefxbbxbf in binary) is a byte order mark (BOM) character.
Table of Contents
What is BOM
According to Wikipedia, the BOM is an optional value at the beginning of a text stream and the presence can mean different things. With UTF-8 text streams, for example, it can be used to signal that the text is encoded in UTF-8 format, while with UTF-16 & UTF-32, the presence of BOM signals the byte order of a stream.
In my case, the data was in UTF-8 and has already been received, so having that BOM character in r.text seemed unnecessary and since it was causing the json.loads method to throw the JSONDecodeError, I wanted to get rid of it.
The hint on how to solve this problem can be found in the Python error itself. It mentions «decode using utf-8-sig«, so let’s examine this next.
What is utf-8-sig?
The utf-8-sig is a Python variant of UTF-8, in which, when used in encoding, the BOM value will be written before anything else, while when used during decoding, it will skip the UTF-8 BOM character if it exists and this is exactly what I needed.
So the solution is simple. We just need to decode the data using utf-8-sig encoding, which will get rid of the BOM value. There are several ways to accomplish that.
Solution 1 — using codecs module
First, I tried to use a codecs module which is a part of a Python standard library. It contains encoders and decoders, mostly for converting text. We can use the codecs.decode() method to decode the data using utf-8-sig encoding. Something like this:
Unfortunately, the codecs.decode method didn’t accept strings, as it threw the following error:
Next, I tried to convert the string into a bytes object. This can be done using encode() method available for strings. If no specific encoding argument is provided, it will use the default encoding which is UTF-8 (at least on Windows):
The decoded_data variable finally contained data without the BOM byte order mark Unicode character and I was finally able to use it on json.loads method.
So, this worked, but I didn’t like I was using an extra module just to get rid of one Unicode BOM character.
Источник
Size:
a
a
a
2020 October 30
_zbx_mem_malloc(): please increase CacheSize configuration parameter
кэша видно мало по дефолту
По дефолту много чего мало, но если ошибка сохраняется, значит проблема не в этом файле
починилось — в dns внёс корректную запись о заббикс сервере, видимо где то в конфигах было обращение по хостнейму.
p.s. а нет, опять упало 😩 теперь по крайней мере я вижу запущенный заббикс сервер периодически, значит я иду в правильном направлении. но иногда проскакивает надпись что он is not running
починилось — в dns внёс корректную запись о заббикс сервере, видимо где то в конфигах было обращение по хостнейму.
p.s. а нет, опять упало 😩 теперь по крайней мере я вижу запущенный заббикс сервер периодически, значит я иду в правильном направлении. но иногда проскакивает надпись что он is not running
Насколько мне известно, за работу заббикса отвечают 2 конфиг файла.
Если у вас используются DNS имена… ну попробуйте статику забить временно, опять же если позволяет ситуация.
К сожалению такие плавающие баги на месте видней, так что удачи и да прибудут с вами логи >_<
Точно не вспомню, но если по дефолту устанавливать заббикс, то он кажется вообще не запуститься, если будет включен selinux и его не настраивать, раз у вас все запускается, значит проблема только в конфиге заббикса….
Никто не пытался в Zabbix 5.* настроить отправку сообщений в телеграм с эмоджи? В тесте всё работает, когда переношу в шаблон сообщений — Sending failed: Error: cannot convert request contents to utf8. В чем причина может быть?
Тестил на Zabbix 5.0 и 5.2
Никто не пытался в Zabbix 5.* настроить отправку сообщений в телеграм с эмоджи? В тесте всё работает, когда переношу в шаблон сообщений — Sending failed: Error: cannot convert request contents to utf8. В чем причина может быть?
Тестил на Zabbix 5.0 и 5.2
привет возможно ли сделать триггер,который срабатывает от результатов с 2 хостов?
2020 November 01
Здрасте))
Мне нужно получать с веб страницы одно значение (одна цифра среди хлама — вдруг это важно). Какой тип выбрать: HTTP агент или веб сценарии.. или может еще что?
Спасибо;)
Здрасте))
Мне нужно получать с веб страницы одно значение (одна цифра среди хлама — вдруг это важно). Какой тип выбрать: HTTP агент или веб сценарии.. или может еще что?
Спасибо;)
И тебе привет.
HTTP Agent + какой-нибудь препроцессинг, зависит от «хлама».
Добрый день. Успешно эксплуатировал zabbix 4.0 с элементами данных ssh. После обновления до 5.2 элементы перестали корректно получать данные. Ошибка в логах Cannot read data from SSH server. Подскажите в чём может быть проблема? Debian 10.
И тебе привет.
HTTP Agent + какой-нибудь препроцессинг, зависит от «хлама».
Спасибо
Добрый день. Успешно эксплуатировал zabbix 4.0 с элементами данных ssh. После обновления до 5.2 элементы перестали корректно получать данные. Ошибка в логах Cannot read data from SSH server. Подскажите в чём может быть проблема? Debian 10.
я извиняюсь, но это старый пост ещё от 2012 года, и там вроде как нет решения
я извиняюсь, но это старый пост ещё от 2012 года, и там вроде как нет решения
Какой пост? Это известные проблемы по 5.2. Там описание и решение.
Sending failed error cannot convert request contents to utf8
Виртуальный сервер на SSD — недорого!
Аренда выделенных и виртуальных серверов (VDS/VPS), хостинг, аренда IP-адресов, администрирование, круглосуточная поддержка
Резервное копирование с проверкой на вирусы.
Удобный сервис создания резервных копий на любой сервер сети интернет. Отслеживайте изменения, проверяйте на вирусы. Надежно защитите свой бизнес!
Выбираете сервер? Любая конфигурация на заказ!
Аренда физических серверов любых конфигураций под любые запросы — 1С бухгалтерия, игровые сервера, нагруженные проекты, интернет-магазины!
Zabbix Russian Community
Никто не пытался в Zabbix 5.* настроить отправку сообщений в телеграм с эмоджи? В тесте всё работает, когда переношу в шаблон сообщений — Sending failed: Error: cannot convert request contents to utf8. В чем причина может быть?
Тестил на Zabbix 5.0 и 5.2
Никто не пытался в Zabbix 5.* настроить отправку сообщений в телеграм с эмоджи? В тесте всё работает, когда переношу в шаблон сообщений — Sending failed: Error: cannot convert request contents to utf8. В чем причина может быть?
Источник
Can’t POST UTF-8 encoded data #3476
Comments
rasgo-cc commented Aug 8, 2016
I’m using Requests to send data to a Firebase database. Data contained in the JSON file is UTF-8 encoded. I’m sending that data as follows:
But this is sent as «latin-1» text no matter what, because the underlying HTTP client library always sends the body’s text with that encoding.
This results on weird characters displayed on my website.
If instead of:
data_to_send = json.dumps(data).encode(«utf-8»)
or
data_to_send = json.dumps(data, ensure_ascii=False).encode(«utf-8»)
I do this:
data_to_send = json.dumps(data, ensure_ascii=False)
Then, HTTP client library throws this error:
So, how am I supposed to POST UTF-8 encoded data using Requests?
The text was updated successfully, but these errors were encountered:
Lukasa commented Aug 8, 2016
@Cidadao You’ll need to more explicitly state what your actual problem is. Let me address why.
Firstly, you say you want to POST your JSON as UTF-8 encoded data. Why is this needed? By default, the Python JSON library will automatically escape all non-ASCII unicode code points. For example:
This code produces the same result on Python 2.7, by the way. I mention this because it doesn’t matter if this is encoded in UTF-8 or Latin-1, the exact output will be identical as it uses only ASCII characters.
Your next comment is about apparent problems with data encoding. I cannot reproduce this problem:
This is where I use the same data dictionary as above, containing a whole slew of Chinese characters. Wireshark reveals the posted body as being the byte sequence 7b 22 6b 65 79 22 3a 20 22 e6 81 92 e5 86 99 e4 be a1 e6 99 82 e7 a9 b6 e8 a8 8e e6 98 ad e5 90 8d e4 bc 9a e8 a8 bc e4 bb 95 e7 8e b2 e4 ba 88 e9 82 b8 e5 ba 81 e5 ad 90 e7 ad 89 e5 9b b3 e8 80 85 22 7d , which decodes via UTF-8 to:
So I think I need more information. What does your data look like? What do your headers look like? What Python and Requests version are you using?
Источник
Zabbix 5 — что не так с извещениями в Telegram?
По руководству был настроен бот, тест сообщений в чат проходил, даже сообщения отправлялись. После этого была сделана попытка подкрутить шаблоны сообщений, в т.ч. вставить эмодзи. И всё сломалось. А сейчас даже тест сообщений не проходит.
Если убрать скобочки, тест проходит. Но в реальных сообщениях разных символов, в том числе ‘-‘ , ‘(‘ и т.п. дофига и все эти сообщения оседают в Action Log.
Ну, и чтоб 2 раза не вставать — как например в subject сообщения вставить эмодзи, например, SOS с кодом xF0x9Fx86x97 ? Маркдаун :sos: тоже не срабатывает. Если попытаться вставить сам символ, то ругается при уже сохранении страницы Media Type.
- Вопрос задан более двух лет назад
- 1969 просмотров
Эмоджи можно определять как Unicode Surrogates (вида `u01234uABCD` )
Тогда в JS-скрипте отправки сообщения в телеграм надо 29-ю строку вида
data = JSON.stringify(params);
заменить на
Суть в том, что JSON.stringify экранирует все слэши в Surrogates, получается два слэша. Поэтому, после того, как получили JSON с data для отправки надо вернуть один слэш и это изменение делаем только для Unicode Surrogates, а не вообще по тексту. Регулярка в помощь.
единственное, не все проходят, возможно, UTF16 не годятся.
У меня такие подошли ✅ ‼️ ⚠️
По умолчанию поле Parsemode пустое. Попробуйте очисти поле «Parsemode»
Я не просил перевести текст, это я отлично понимаю. Пару дней назад это проходило
Источник
Отправка уведомлений из Zabbix в Telegram через Webhook
Не так давно вышел Zabbix 4.4 в котором появилось много всего интересного. Например, добавлена возможность использования web-хуков и собственных обработчиков действий и уведомлений при выявлении сбоев проверяемых сервисов. Обработчики можно создавать на JavaScript и применять для обращения к внешним службам доставки уведомлений или системами отслеживания ошибок. Например, можно написать обработчик для отправки сообщений о проблемах в корпоративный чат.
В данной статье я расскажу как можно из Zabbix 4.4 (а так же из 5.0) отправлять сообщения в Телеграм без использования дополнительных скриптов.
Исходные данные: Zabbix 4.4
Задача: Сделать отправку уведомлений из Zabbix в Telegram через Webhook
Для того чтобы отправлять сообщения в Телеграм необходим доступ до api.telegram.org на порт 443 с Вашего Zabbix-сервера.
1. Создаем бота у @botfather, официальная инструкция тут
Команда для создания бота /newbot
Далее вводим имя желаемого бота обязательно маленькими буквами и в конце префикс _bot, например: myxxxxxxx_bot
Если имя не занято, то botfather скажет «Done! Congratulations on your new bot» и далее выдаст ссылку на бота, вида: t.me/myxxxxxxx_bot
А так же кроме всего прочего после слов «Use this token to access the HTTP API:» выдаст API-ключ нашего бота, он нам пригодиться дальше.
Нам нужно перейти по ссылке на нашего бота и нажать ЗАПУСТИТЬ или ввести /start, если этого не сделать, то сообщения Вам приходить не будут. Данную ссылку Вы можете давать всем кто будет получать оповещения.
2. Теперь нам нужно узнать собственный идентификатор, чтобы указать его в настройках профиля пользователя в Zabbix
Самый простой способ узнать свой ID — это подключиться к боту @get_id_bot, нажать ЗАПУСТИТЬ и он выдаст вам Ваш ID. Дополнительную информацию о боте можно узнать здесь.
3. Импорт нового способа оповещения:
Открываем Zabbix, переходим в «Администрирование» -> «Способы оповещений», наживаем «Импорт» и выбираем файл zbx_export_mediatypes.xml
У нас появляется новый способ оповещения «Telegram via Webhook», редактируем его и в строку с именем token вводим Ваш API-ключ бота из п.1
Далее Вы можете изменить 3 дополнительных параметра отправки сообщений, это parse_mode, disable_web_page_preview и disable_notification
Параметр parse_mode задает режим разметки сообщений, может иметь значения HTML, Markdown или MarkdownV2, более детально о разметке сообщений можно почитать в официальной документации.
Параметр disable_web_page_preview дает возможность отключить предпросмотр ссылок в сообщениях, может иметь значения true или false. Иногда имеет смысл ставить его в false, выбирать Вам.
Параметр disable_notification дает возможность отключить уведомления о приходе сообщения, может иметь значения true или false.
Параметр HTTPProxy используется только в пропатченой версии zabbix-server v4.4, которая позволяет отправлять сообщения в Телеграм через HTTP-прокси. Не заполняйте это поле в стандартной версии zabbix v4.4! О том как пересобрать zabbix-server с поддержкой HTTPProxy для Web-хуков я описал тут
В Zabbix v5.0 реализована работа вебхуков через прокси и патч не требуется, поэтому Вы можете использовать параметр HTTPProxy и указать в нем адрес прокси-сервера.
Формат параметра HTTPProxy: schema://user:[email protected]:port
где
schema — это протокол, может быть http, https или socks5h
user и password — это логин и пароль пользователя если на прокси используется авторизация (не обязательные поля)
ip — это IP адрес или доменное имя
port — это порт прокси
Пример:
http://123.45.67.89:3128
или
socks5h://vasua:[email protected]:1080
Установленная галочка «Включить запись меню события» (Include event menu entry) позволяет добавлять в алармы на странице «Проблемы» ссылку с именем указанном в поле «Имя записи меню» (Menu entry name) при выборе которой будет открываться страница указанная в «URL записи меню» (Menu entry URL). Поле «URL записи меню» установлено в специально, это позволяет вместе с включенной опцией «Обработка тегов» формировать правильные ссылки на сообщения в чате.
Пример настройки, маркировки тегом и вид меню перехода к сообщению:
Настройки метода оповещения
Пример маркировки тегами и меню перехода к сообщению в Телеграм
Zabbix telegram via webhook test
4. Настройка способа оповещения у пользователя
Теперь перейдите в настройки пользователя который должен получать оповещения, добавьте новое оповещение.
Тип выберите «Telegram via Webhook», в поле «Отправлять на» введите ID пользователя из п.2, пример на картинке ниже:
zabbix telegram via webhook user profile
5. Настройка действий
Теперь можно настроить непосредственно действия по отправке уведомления при наступлении определенных событий, для этого перейдите в Zabbix в «Настройка» -> «Действия», выберите Источник событий — Триггеры и нажмите кнопку «Создать действие».
6. Отладка скрипта отправки и логгирование.
Скрипт отправки написан на JavaScript и ведет полное логгирование действий по отправке на уровне 3 (warning), если Вы откроете стандартный лог-файл Zabbix-server по пути /var/log/zabbix/zabbix_server.log, то увидите примерно такое:
Код ответа 200 означает успешную отправку.
Могут быть и ошибки отправки, пример (указан неправильный ID чата):
или указан неправильный токен:
В отправляемых сообщениях можно использовать эмодзи символы, коды символов смотрим тут, колонка Unicode. Перед кодом нужно использовать обратный слэш для экранирования.
Внимание! Отправка эмодзи с указанием unicode-кода будет работать только в Zabbix v4.4, в 5-й версии Zabbix нужно использовать непосредственно сами картинки, их можно вставлять в нужные места сообщений (смотрите скриншоты ниже).
Пример отправки сообщения с эмодзи в Zabbix v4.4:
Пример отправки сообщения с эмодзи в Zabbix v4.4
Пример отправки сообщения с эмодзи в Zabbix v5:
Пример отправки сообщения с эмодзи в Zabbix v5
На этом все, до скорых встреч.
Если у Вас возникли вопросы или Вы хотите чтобы я помог Вам, то Вы всегда можете связаться со мной разными доступными способами.
Источник
Cannot get Servlet to process request content as UTF-8
I’m converting a legacy app from ISO-8859-1 to UTF-8, and I’ve used a number of resources to determine what I need to set to get this to work. However, after several configuration, code, and environment changes, my Servlet (in Tomcat 5) doesn’t seem to process submitted HTML form content as UTF-8.
Here’s what I’ve set up for configuration.
With some debug logs I know the following:
However, when I submit my form with an input containing «Бить баклуши», I see the following (from my logs):
I know that the request content type was null , so it was explicitly set to «UTF-8» in my servlet filter. Also, I’m viewing my logs from a terminal, whose encoding I know is set to UTF-8 as well.
What am I missing here? What else do I need to set for the Servlet to correctly process my input as UTF-8? If more information will help, I’ll be glad to add more debugging and update this question with it.
Edit:
- I’m not using Windows Terminal (I’m using PuTTY), so I’m pretty certain the problem is not what I’m viewing the logs with. This is seconded by the fact that when I send my response back to the browser with the submitted content and output it, it’s the same garbage as above.
- The form’s being submitted from IE8.
Solution:
My web.xml definition for my CharsetFilter was too far down (below my servlet configurations and other filters). I moved the filter definition to the very top of the web.xml document and everything worked correctly. See the accepted answer below.
2 Answers 2
Edit4 (the final and corrected answer as requested)
Your servlet filter gets applied too late.
A possible proper order would be in web.xml as follows
At first I thought the issue would get settled easily but it took me 2 days to figure it out. Here is my finding and I hope it helps 1) You need to have below code in your JSP
if you have many JPS pages then you can use below code in web.xml as explained here: How can I cleanly set the pageEncoding of all my JSPs?
2) Be sure before you read any parameter in your servlet, you have already set character encoding to UTF-8
I have done it in my own filter (first filter before chain.doFilter.
3) Your database must support UTF-8 so be sure you have already applied the changes to your table and columns. To be sure it works fine just type in some words in Japanese and save. If the table holds the content then that is fine.
4) The last and most important one is the connection string to your database. Even though all my DB and tables were supporting the UTF8 but this extra line was the reason I could save my content into the database. So be sure you add characterEncoding=UTF8 to your connection string like below
For JSP pages with enctype=»multipart/form-data» you will need to do one extra step. When you read a FileItem by getString method be sure you change it to getString(«UTF-8») then that should do fine.
Источник
Sometimes Google Chrome throw a Could not decode a text frame as UTF-8 error. It happens when the server send invalid unicode characters (see Unicode surrogates) to the browser (via websockets or any other transport) and . I’ve found two work-around for this issue.
The first one is from my point of view, the best approach (the original code came from SockJS codebase). It removes all the invalid unicode characters from the string so you can send it from the server-side without further decoding.
/* * Fix the "Could not decode a text frame as UTF-8." bug #socket.io #nodejs #websocket * * Usage: * cleanedString = filterUnicode(maybeHarmfulString); * * Original work-around from SockJS: https://github.com/sockjs/sockjs-node/commit/e0e7113f0f8bd8e5fea25e1eb2a8b1fe1413da2c * Other work-around: https://gist.github.com/2024272 * */ var escapable = /[x00-x1fud800-udfffu200c-u200fu2028-u202fu2060-u206fufff0-uffff]/g; function filterUnicode(quoted){ escapable.lastIndex = 0; if( !escapable.test(quoted)) return quoted; return quoted.replace( escapable, function(a){ return ''; }); }
The second one takes another approach which seems valid (I only tested the former) but requires an extra decoding step on the other side:
/** * encode to handle invalid UTF * * If Chrome tells you "Could not decode a text frame as UTF-8" when you try sending * data from nodejs, try using these functions to encode/decode your JSON objects. * * see discussion here: http://code.google.com/p/v8/issues/detail?id=761#c8 * see also, for browsers that don't have native JSON: https://github.com/douglascrockford/JSON-js * * Any time you need to send data between client and server (or vice versa), encode before sending, * and decode upon receiving. This is useful, for example, if you are using socket.io for real-time * client/server communication of data fetched from a third-party service like Twitter, which might * contain Emoji, or other UTF characters outside the BMP. */ function strencode( data ) { return unescape( encodeURIComponent( JSON.stringify( data ) ) ); } function strdecode( data ) { return JSON.parse( decodeURIComponent( escape ( data ) ) ); }
Hope this help !
[Update] Dougal Campbell made some important notes: “the second method preserves the original data, while the first strips out information, altering the original data”. Thus, the first method can lead to potential security leaks (see his comment).