Logstash » История » Версия 7
  Константин Пильник, 2022-11-29 18:36 
  
| 1 | 1 | Константин Пильник | h1. Logstash | 
|---|---|---|---|
| 2 | |||
| 3 | h2. разбираем лог syslog | ||
| 4 | |||
| 5 | 5 | Константин Пильник | h4. rsyslog | 
| 6 | |||
| 7 | <pre><code class="bash"> | ||
| 8 | ~# cat /etc/rsyslog.d/remote.conf | ||
| 9 | # udp | ||
| 10 | *.* @127.0.0.1:500 | ||
| 11 | 6 | Константин Пильник | # tcp | 
| 12 | #*.* @@127.0.0.1:500 | ||
| 13 | 5 | Константин Пильник | </code></pre> | 
| 14 | |||
| 15 | 1 | Константин Пильник | {{collapse(logstash.conf) | 
| 16 | 4 | Константин Пильник | <pre><code class="php"> | 
| 17 | 1 | Константин Пильник | input { | 
| 18 |   file { | ||
| 19 | type => "message" | ||
| 20 | path => [ "/var/log/messages" ] | ||
| 21 | start_position => "end" | ||
| 22 | stat_interval => 1 | ||
| 23 | discover_interval => 3 | ||
| 24 | } | ||
| 25 | 5 | Константин Пильник | # production | 
| 26 | #  udp { | ||
| 27 | # port => 500 | ||
| 28 | # type => syslog | ||
| 29 | # } | ||
| 30 | 1 | Константин Пильник | } | 
| 31 | |||
| 32 | filter { | ||
| 33 |   if [type] == "message" { | ||
| 34 |     grok { | ||
| 35 |       match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?:\s+%{GREEDYDATA:syslog_message}" } | ||
| 36 | } | ||
| 37 |     date { | ||
| 38 | match => [ "syslog_timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ] | ||
| 39 | } | ||
| 40 | } | ||
| 41 | } | ||
| 42 | |||
| 43 | output { | ||
| 44 |   stdout {} | ||
| 45 | 5 | Константин Пильник | # production | 
| 46 | # elasticsearch { | ||
| 47 | # hosts => ["elasticsearch:9200"] | ||
| 48 | #   index    => "%{[type]}-%{+YYYY.MM.dd}" | ||
| 49 | #   user     => "${ELASTIC_USERNAME}" | ||
| 50 | #   password => "${ELASTIC_PASSWORD}" | ||
| 51 | # } | ||
| 52 | 1 | Константин Пильник | } | 
| 53 | 3 | Константин Пильник | </code></pre> | 
| 54 | 1 | Константин Пильник | }} | 
| 55 | 7 | Константин Пильник | https://www.elastic.co/guide/en/logstash/current/plugins-inputs-syslog.html | 
| 56 | 1 | Константин Пильник | |
| 57 | h2. разбираем лог nginx из файловой системы | ||
| 58 | |||
| 59 | {{collapse(nginx.conf) | ||
| 60 | <pre> | ||
| 61 | log_format json_combined escape=json | ||
| 62 |   '{' | ||
| 63 | '"time_local":"$time_local",' | ||
| 64 | '"remote_addr":"$remote_addr",' | ||
| 65 | '"remote_user":"$remote_user",' | ||
| 66 | '"request":"$request",' | ||
| 67 | '"status": "$status",' | ||
| 68 | '"body_bytes_sent":"$body_bytes_sent",' | ||
| 69 | '"request_time":"$request_time",' | ||
| 70 | '"http_referrer":"$http_referer",' | ||
| 71 | '"http_user_agent":"$http_user_agent"' | ||
| 72 | '}'; | ||
| 73 | access_log /var/log/nginx/access.log json_combined; | ||
| 74 | </pre> | ||
| 75 | }} | ||
| 76 | {{collapse(logstash.conf) | ||
| 77 | 4 | Константин Пильник | <pre><code class="php"> | 
| 78 | 1 | Константин Пильник | input { | 
| 79 |   file { | ||
| 80 | type => "nginx" | ||
| 81 | path => [ "/var/log/nginx/access.log" ] | ||
| 82 | start_position => "end" | ||
| 83 | } | ||
| 84 | } | ||
| 85 | |||
| 86 | filter { | ||
| 87 |   if [type] == "nginx" { | ||
| 88 |     json { | ||
| 89 | source => "message" | ||
| 90 | } | ||
| 91 | } | ||
| 92 | } | ||
| 93 | |||
| 94 | output { | ||
| 95 |   stdout {} | ||
| 96 | } | ||
| 97 | </code></pre> | ||
| 98 | }} | ||
| 99 | |||
| 100 | h2. разбираем лог nginx из syslog | ||
| 101 | |||
| 102 | {{collapse(nginx.conf) | ||
| 103 | <pre> | ||
| 104 | log_format json_combined escape=json | ||
| 105 |   '{' | ||
| 106 | '"time_local":"$time_local",' | ||
| 107 | '"remote_addr":"$remote_addr",' | ||
| 108 | '"remote_user":"$remote_user",' | ||
| 109 | '"request":"$request",' | ||
| 110 | '"status": "$status",' | ||
| 111 | '"body_bytes_sent":"$body_bytes_sent",' | ||
| 112 | '"request_time":"$request_time",' | ||
| 113 | '"http_referrer":"$http_referer",' | ||
| 114 | '"http_user_agent":"$http_user_agent"' | ||
| 115 | '}'; | ||
| 116 | access_log syslog:server=unix:/dev/log,tag=nginx,severity=error,nohostname json_combined; | ||
| 117 | </pre> | ||
| 118 | }} | ||
| 119 | {{collapse(logstash.conf) | ||
| 120 | 4 | Константин Пильник | <pre><code class="php"> | 
| 121 | 1 | Константин Пильник | input { | 
| 122 |   file { | ||
| 123 | type => "syslog" | ||
| 124 | path => [ "/var/log/syslog" ] | ||
| 125 | start_position => "end" | ||
| 126 | } | ||
| 127 | } | ||
| 128 | |||
| 129 | filter { | ||
| 130 |   if [type] == "syslog" { | ||
| 131 |     grok { | ||
| 132 |       match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?:\s+%{GREEDYDATA:syslog_message}" } | ||
| 133 | } | ||
| 134 |     json { | ||
| 135 | source => "[syslog_message]" | ||
| 136 | target => "[nginx_message]" | ||
| 137 | } | ||
| 138 | } | ||
| 139 | } | ||
| 140 | |||
| 141 | output { | ||
| 142 |   stdout {} | ||
| 143 | } | ||
| 144 | 3 | Константин Пильник | </code></pre> | 
| 145 | 1 | Константин Пильник | }} | 
| 146 | |||
| 147 | |||
| 148 | 2 | Константин Пильник | h3. ссылки | 
| 149 | |||
| 150 | 1 | Константин Пильник | https://www.elastic.co/guide/en/logstash/current/input-plugins.html | 
| 151 | https://www.elastic.co/guide/en/logstash/current/filter-plugins.html | ||
| 152 | https://www.elastic.co/guide/en/logstash/current/output-plugins.html |