Хозяйке на заметку - самый быстрый способ потоковой записи текста - это
ЗаписьXML.ЗаписатьБезОбработки(ВашТекст);
быстрее ЗаписьТекста и уж тем более ТекстовогоДокумента.
Хозяйке на заметку - самый быстрый способ потоковой записи текста - это
ЗаписьXML.ЗаписатьБезОбработки(ВашТекст);
быстрее ЗаписьТекста и уж тем более ТекстовогоДокумента.
Добрый день.
Решаю задачу разбора логов ТЖ 1С и их анализа средствами ELK.
Архитектура следующая:
Сервер 1. На нем: Служба 1С, FileBeat.
Сервер 2. На нем: logstash, elasticsearch (with watcher plagin), kibana, membrane-service-proxy (вместо elastic Shield).
Принцип работы (beats+ELK).
FileBeat выступает в роли агента, при появлении новых данных (причем склеивает их используя multiline) отправляет пакет в logstash. Logstash преобразовывает данные в JSON и отправляет в elasticsearch. Kibana выступает в роли вьюшки. Membrane-service-proxy используется для авторизации к elasticsearch и Kibana.
При реализации этой схемы столкнулся со следующими проблемами:
Логи ТЖ (*.log) записываются в кодировке UTF-8. Как следствие в начало каждого файла добавляется ‘п»ї’ (0xEF 0xBB 0xBF). Подробнее W3 UTF-8.
В filebeat.yml я указал encoding: utf-8, но проблема осталась.
Как следствие я теряю одно событие в каждом новом файле лога.
Пример того что filebeat отправляет в logstash:
{ "@timestamp": "2016-05-12T12:06:53.593Z", "beat": { "hostname": " 1CAPP-07", "name": "1CAPP-07" }, "count": 1, "fields": null, "input_type": "log", "message": "**?**06:45.0409-229386,SDBL,3,process=rphost,p:processName=PP ,t:clientID=919,t:applicationName=1CV8,t:computerName=TERM4,t:connectID=9603, SessionID=6119,Usr=...,Trans=0,Func=Transaction,Func=CommitTransa ction", "offset": 5691, "source": "T:\\tehjourn\\rphost_8876\\16051215.log", "type": "tj1s" }
Получая данные в logstash и разбирая их я получаю две даты: @timestamp (дата и время обработки логов из beats) и timestamp (дата события из ТЖ – собирается из 16051215.log и ?06:45.0409).
Обеда даты имеют формат "YYYY-MM-dd HH:mm:ss.SSS Z (mutate {add_field => { “timestamp” => “%{year}-%{month}-%{day}T%{hour}:%{minute}:%{second}Z” }})
@timestamp – если я правильно понимаю в UTC, а timestamp в локальном формате.
Как timestamp перевести в UTC?
Помогите пожалуйста решить эти проблемы.
Этот “лишний символ” - byte offset mark. пересохраните (рядом) в файл без BOM, или вырежьте его кодом
Я понимаю.
пересохраните (рядом) в файл без BOM
в контексте моей задачи - не вариант.
вырежьте его кодом
в filebeat это можно сделать? или наверное только в logstash…
Сам спросил и по классике жанра сам отвечу.
п.1
не нашел простого пути избавиться от BOM средствами filebeat, отрезал его logstash’ом.
mutate {gsub => ["message", "^[\W]{1,}", ""]}
п.2
(mutate {add_field => { "timestamp" => "%{year}-%{month}-%{day}T%{hour}:%{minute}:%{second}Z"}})
не внимательно ознакомился с ISO 8601.
вместо Z (признак времени по UTC) необходимо указать часовой пояс +03:00 ("%{year}-%{month}-%{day}T%{hour}:%{minute}:%{second}+03:00")
Вместо часового пояса +03:00 можно так же указать Europe/Moscow. подробнее тут
Провел свой микро тест.
10 раз по 10 000 строк. 4 метода. Результат в табличке. Победителем оказался ЗаписьТекста
Всем привет!
Помогите пожалуйста разобраться в ошибке.
Я использую PaketBeat (Version: 1.2.3) для анализа трафика и записи в elasticsearch.
Регулярно получаю следующую ошибку:
2016/08/08 15:29:09.853618 decoder.go:97: INFO packet decode failed with: Invali d (too small) IP length (0 < 20) 2016/08/08 15:29:12.853618 http.go:421: WARN Response from unknown transaction. Ingoring.
Пакеты c подобной ошибкой PaketBeat соответственно не разбирает.
PaketBeat запускаю с ключами ..\packetbeat.exe -e -dump c:\temp\trace2.pcap
.
В trace2.pcap (https://drive.google.com/open?id=0B_459K_hkeaRb2VhNjhZOVhsWEE)
визуально проблем нет, все отображается корректно.
packetbeat.yml:
`
############################# Sniffer #########################################
interfaces:
device: 0
############################# Protocols #######################################
protocols:
http:
ports: [2001]
send_all_headers: true
include_body_for: ["application/json","text/html"]
send_request: true
send_response: true
transaction_timeout: 2s
############################# Output ##########################################
output:
console:
pretty: true
`
Подскажите пожалуйста в чем может быть проблема и как можно ее решить?
Там были особенности с Windows Server’ами
фишка была в том, как определялся IP адрес хоста:
(Invoke-WebRequest -Method Head -Uri http://elasticsearch.irisnet.be:80).statuscode
500
я чинил как описано вот тут
в итоге оказалось, что я намудрил с прокси и с IPv6
IPv6 - выключен.
Хост к которому ходят запросы^
PS C:\Users\user> (Invoke-WebRequest -Method Head -Uri http://lip-1capp-07:2001).statuscode 200
С этим проблем вроде бы нет, тоже.
Ну ничего себе ты исследование провёл ;-). Круто
Да… мозги закипали временами… =)
Не стал создавать новую тему, отпишусь здесь.
В июньском вебинаре по ELK были предоставлены материалы, в которых были конфигурационные файлы для LogStash. В частности фильтр 061-filter-onec.conf, в котором используются grok паттерны из каталога /etc/logstash/patterns. Этих паттернов в материалах нет, а без них фильтр не работает.
Можно ли их как то получить?
Немного некро(?)постинга.
Сейчас прикручиваем у себя эту обработку с BulkAPI - и таки приходится проверять не только на код ответа 200, но и на наличие ошибок - в ответе есть bool поле errors, в котором и можно проверить, действительно ли все операции прошли успешно.
Поделитесь результатами доработки?
Когда допилю до вида, который не стыдно показать - поделюсь. Пока что я просто проверяю успешность строковым поиском по телу ответа на наличие строки “errors”:false и код состояния 200.
Добили sqlite из бандла - теперь плагин просто можно скачать и запустить
завтра добью grok и финально выложу.
на досуге добъем вот это https://github.com/silverbulleters-research/sqliteOneCBeat
напишу как сделаем и выложу весь обновленный комплект сюда
выложен в публичный доступ
пока не качайте - работаем еще пока над стабильностью в различных режимах.