Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Rsyslog — как я перестал бояться и полюбил обра...

DevOps Moscow
December 20, 2018

Rsyslog — как я перестал бояться и полюбил обработку логов

DevOps Moscow New Year Party, 19-12-2018
Сергей Печенко (Райффайзенбанк)

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

DevOps Moscow

December 20, 2018
Tweet

More Decks by DevOps Moscow

Other Decks in Education

Transcript

  1. Об авторе ` • За клавиатурой 27й год • Ничего

    не ломаю в production- окружениях с 2013 • Изучаю и воплощаю DevOps-практики с 2014 • Founder: @ru_gitlab/@ru_logs/@ru_ldap • Admin: @pro_ansible • @tnt4brain
  2. FLEK – тёмная сторона Силы ▪ Filebeat (Go) – первичный

    сбор из источников ▪ Logstash (Java) – обработка регулярками – обогащение ▪ ElasticSearch (Java) – хранение – выполнение запросов на Query DSL ▪ Kibana (Node.JS) – UI 1. Централизованная обработка логов Rsyslog: как я перестал бояться и полюбил обработку логов 3 Скачай, разложи, настрой… Да сколько можно-то?
  3. Rsyslog: как я перестал бояться и полюбил обработку логов 4

    ▪ Rsyslog (С) – первичный сбор из источников – обработка – обогащение ▪ ElasticSearch (Java) – хранение – выполнение запросов на Query DSL ▪ Kibana (Node.JS) – UI Ответ светлой стороны Rsyslog ставится в minimal: 1.CentOS 4-… 2.Debian 5-… 3.Ubuntu 12-…
  4. Устройство rsyslog 2 Input modules Output modules Parser modules Modification

    modules Rsyslog: как я перестал бояться и полюбил обработку логов
  5. im… • im3195 (RFC3195) • imfile (filebeat sucks) • imjournal

    (systemd-journal) • imkafka (Apache Kafka) • imklog (kernel log/kmsg) • impstats (внутр. счётчики) • imptcp • imrelp (rel.evt.loggn’prot.) • imsolaris (Solaris) • imudp • imuxsock Больше модулей для всех, даром, и пусть никто не уйдёт обиженный! Rsyslog: как я перестал бояться и полюбил обработку логов 6 mm… • mmanon • mmcount • mmdblookup • mmexternal (!) • mmfields • mmjsonparse • mmkubernetes • mmnormalize • mmpstrucdata (RFC5424) • mmrfc5424addhmac • mmrm1stspace • mmsequence • mmsnmptrapd • mmutf8fix om… • omamqp1 • omelasticsearch • omfile • omfwd • omhdfs • omhiredis • omhttpfs • omjournal • omkafka • omlibdbi • ommail • ommongodb • ommysql • omoracle • ompgsql • ompipe • omprog • omrelp • omruleset • omsnmp • omusrmsg pm… • pmciscoios • pmlastmsg • pmnormalize • pmnull • pmrfc3164 • pmrfc3164sd • pmrfc54254
  6. ▪ работает на базе liblognorm - скоростного парсера; ▪ регулярки

    - не обязательно(!); ▪ способен переварить 250Гб/час без ущерба для производительности (ΔLA<1% @ 56*Xeon 2.6GHz) ▪ остальные интересные подробности - по ссылке [3] 3. Чуть подробнее о mmnormalize 7 Rsyslog: как я перестал бояться и полюбил обработку логов
  7. module(load="mmnormalize") $template cust_log_fmt,"%syslogseverity-text:1:%:%programname:R,ERE,1,BLANK:custom_(.*)--end% %$year:3:4%%$month%%$day% %timereported:8:15% %msg%\n" $template graylog,"%$!all-json%\n" template(name="gelf" type="list")

    { constant(value="{\"version\":\"1.1\",") constant(value="\"host\":\"") property(name="hostname") constant(value="\",\"short_message\":\"") property(name="$!all-json" format="json") constant(value="\",\"timestamp\":\"") property(name="timegenerated" dateformat="unixtimestamp") constant(value="\",\"level\":\"") property(name="syslogseverity") constant(value="\"}") } if ($programname contains 'custom') then { if ($syslogseverity <= 3) then { action(type="omfile" file="/var/log/custom/error.log" template="custom_log_fmt") } else { action(type="omfile" file="/var/log/custom/prod.log" template="custom_log_fmt")} action(type="mmnormalize" rulebase="/etc/rsyslog.d/custom.rb") set $!component = 'custom'; action(type="omfwd" target="127.0.0.2" port="5514" protocol="udp" template="gelf") stop } Пример rsyslog.d/custom.conf 8
  8. version=2 prefix= %origin:string{"quoting.char.begin":"[", "quoting.char.end":"]"}% rule=tag1: % varname:char-to{"extradata":":"} %:% reqid:char-to{"extradata":" "}

    % % req:quoted-string % % resp:number % % len:number % % -:quoted-string % % useragent:quoted-string % % dur:float %sec. annotate=tag1:+mydescription="Plain dead request..." Пример rsyslog.d/rulebase.rb 9