Logstash Несколько форматов журнала

Итак, мы смотрим на какой-то агрегатор журналов, поскольку наличие журналов повсюду не масштабируется. Я смотрел на Logstash и смог запустить экземпляр с kibana прошлой ночью, но возникли некоторые проблемы. Например, с помощью geoip, использующего наше доменное имя для журналов httpd (я предположил, что это apache).

В любом случае, теперь я хотел бы открыть его для других наших журналов веб-сервера, и у меня возникли проблемы с пониманием кое-чего: необходимо ли мне определять шаблоны для всех различных форматов журналов, которые мы используем? Как это обычно делается: большой файл logstash.conf или как-то иначе?

PS: я понимаю, что некоторые из этих журналов имеют сходство, например, все файлы error_log имеют почти одинаковые форматы, как и файлы access_logs. Поэтому я предполагаю, что что-то подобное будет обрабатывать все файлы * error_log.

input { 
    file {
        path => "//var/log/httpd/*error_log"
        type => "error_log"
    }
}

filter {
    if [type] == "error_log" {
        grok {
            match => [ "message", "%{COMBINEDAPACHELOG}" ]
        }
    }
}

Во всяком случае, вот образец строки из каждого из журналов, которые я хочу импортировать.

var/log/httpd/access_log:
207.46.13.87 support.mycompany.com - - [15/Mar/2015:07:49:12 -0400] "GET / HTTP/1.1" 302 - "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)"

var/log/httpd/api-access_log:
192.168.1.5 api.mycompany.com - - [15/Mar/2015:06:50:01 -0400] "GET /diag/heartbeat HTTP/1.0" 502 495 "-" "Wget/1.11.4 Red Hat modified"

var/log/httpd/api-error_log:
[Sun Mar 15 08:45:06 2015] [error] [client 192.168.1.5] proxy: Error reading from remote server returned by /diag/heartbeat

var/log/httpd/audit_log:
type=USER_END msg=audit(1426380301.674:2285509): user pid=30700 uid=0 auid=0 msg='PAM: session close acct="root" : exe="/usr/sbin/crond" (hostname=?, addr=?, terminal=cron res=success)'

var/log/httpd/default-access_log:
74.77.76.4 dc01.mycompany.com - - [15/Mar/2015:09:33:46 -0400] "GET /prod/shared/700943_image003.jpg HTTP/1.1" 200 751 "http://mail.twc.com/do/mail/message/view?msgId=INBOXDELIM18496" "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko"

var/log/httpd/error_log:
[Sun Mar 15 13:54:16 2015] [error] [client 107.72.162.115] File does not exist: /var/www/html/portal-prod/apple-touch-icon.png

var/log/httpd/portal-prod-access_log:
192.168.1.5 portal.mycompany.com - - [15/Mar/2015:04:15:02 -0400] "GET /index.php/account/process_upload_file?upload_file=T702135.0315.txt HTTP/1.0" 200 9 "-" "Wget/1.11.4 Red Hat modified"

var/log/httpd/ssl_access_log:
97.77.91.2 - - [15/Mar/2015:10:00:07 -0400] "POST /prod/index.php/api/uploader HTTP/1.1" 200 10

var/log/httpd/ssl_error_log:
[Sun Mar 15 09:00:03 2015] [error] [client 99.187.226.241] client denied by server configuration: /var/www/html/api

var/log/httpd/ssl_request_log:
[15/Mar/2015:11:10:02 -0400] dc01.mycompany.com 216.240.171.98 TLSv1 RC4-MD5 "POST /prod/index.php/api/uploader HTTP/1.1" 7

var/log/httpd/support-access_log:
209.255.201.30 support.mycompany.com - - [15/Mar/2015:04:07:51 -0400] "GET /cron/index.php?/Parser/ParserMinute/POP3IMAP HTTP/1.0" 200 360 "-" "Wget/1.11.4 Red Hat modified"

var/log/httpd/support-error_log:
[Sun Mar 15 04:05:43 2015] [warn] RSA server certificate CommonName (CN) `portal.mycompany.com' does NOT match server name!?

var/log/httpd/web-prod-access_log
62.210.141.227 www.mycompany.com - - [15/Mar/2015:04:38:30 -0400] "HEAD /lib/uploadify/uploadify.swf HTTP/1.1" 404 - "http://www.mycompany.com/lib/uploadify/uploadify.swf" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"

var/log/httpd/web-prod-error_log:
[Sun Mar 15 04:38:30 2015] [error] [client 62.210.141.227] File does not exist: /var/www/html/web-prod/lib, referer: http://www.mycompany.com/lib/uploadify/uploadify.swf

var/log/cron:
Mar 15 04:30:01 lilo crond[22758]: (root) CMD (/opt/mycompnay/bin/check_replication.sh)

var/log/mysqld.log:
150314  5:07:34 [ERROR] Slave SQL: Error 'Deadlock found when trying to get lock; try restarting transaction' on query. Default database: 'my_database'. Query: 'insert into some_table (column_names) values (values)', Error_code: 1213

var/log/openvpn.log:
Sun Mar 15 13:19:31 2015 Re-using SSL/TLS context
Sun Mar 15 12:23:40 2015 don/50.182.238.21:43315 Control Channel: TLSv1, cipher TLSv1/SSLv3 DHE-RSA-AES256-SHA, 1024 bit RSA

var/log/maillog:
Mar 15 05:26:45 lilo postfix/qmgr[4428]: 70460B04004: removed
Mar 15 07:06:40 lilo postfix/smtpd[31732]: connect from boots[192.168.1.4]

codeigniter_logs:
DEBUG - 2015-03-15 14:48:29 --> Session class already loaded. Second attempt ignored.
DEBUG - 2015-03-15 14:48:29 --> Helper loaded: url_helper

person JonasJSchreiber    schedule 15.03.2015    source источник
comment
Во всех местах вопроса, где вы говорите Logwatch, вы на самом деле имеете в виду Logstash, верно?   -  person Magnus Bäck    schedule 16.03.2015
comment
Ах... боже. Извините, да.   -  person JonasJSchreiber    schedule 17.03.2015


Ответы (2)


Для каждого файла журнала с другим форматом потребуется другой шаблон grok. Использование [type] для их условного запуска разумно, так как сокращает обработку.

Если у вас есть журналы с одним и тем же «префиксом» (например, дата/время/приоритет системного журнала), вы можете сначала извлечь эти данные в одном гроке, а затем искать конкретные данные в остатках.

По мере роста вашего конфигурационного файла обратите внимание, что вы можете разделить его на несколько файлов на диске. Logstash объединит их вместе (в алфавитном порядке).

person Alain Collins    schedule 15.03.2015
comment
Спасибо! Просто интересно, так как я хотел использовать предварительно упакованный файл jar, я на 1.3.3, так как мне запустить с аргументами командной строки, которые будут принимать несколько файлов конфигурации? В настоящее время я использую java -jar logstash-1.3.3-flatjar.jar agent -f logstash.conf --debug -- web - person JonasJSchreiber; 16.03.2015
comment
Флаг -f принимает либо один файл, либо каталог. - person Alain Collins; 16.03.2015
comment
Потрясающе, спасибо! Итак, да, я смог использовать SYSLOG в качестве шаблона соответствия для большинства типов журналов sys и COMBINEDAPACHELOG для журналов принятия и ошибок. Другим может потребоваться собственный шаблон соответствия, но это не так уж сложно. - person JonasJSchreiber; 16.03.2015

Итак, одна часть, которая меня раздражала, — это фильтр geoip при использовании шаблона COMBINEDAPACHELOG для синтаксического анализа строки:

192.168.1.5 portal.mycompany.com - - [15/Mar/2015:04:15:02 -0400] "GET /index.php/account/process_upload_file?upload_file=T702135.0315.txt HTTP/1.0" 200 9 " -" "Wget/1.11.4 Red Hat изменен"

Он получит IP-адрес портала.mycompany.com и использует его для определения местоположения. Использование шаблона "%{IP:clientip} %{COMBINEDAPACHELOG}" позаботилось об этом.

Вот мой раздел фильтра:

 if [type] == "apache" {
        if [path] =~ "access" and [path] !~ "ssl_access" {
                mutate { replace => { type => "apache_access" } }
                grok {  match => { "message" => "%{IP:clientip} %{COMBINEDAPACHELOG}" } }
                #grok { match => { "message" => "%{COMBINEDAPACHELOG}" } }
                date {
                        locale => en
                        match => ["timestamp", "dd/MMM/yyyy:HH:mm:ss Z"]
                }
        } else if [path] =~ "ssl_access" {
                mutate { replace => { type => "apache_access" } }
                grok { match => { "message" => "%{COMBINEDAPACHELOG}" } }
                date {
                        locale => en
                        match => ["timestamp", "dd/MMM/yyyy:HH:mm:ss Z"]
                }

        } else if [path] =~ "error" {
                mutate { replace => { type => "apache_error" } }
        }
}

if [agent] != "" {
        useragent { source => "agent" }
}

geoip { source => "clientip" }

Очень помогла конкретизация раздела ввода. Мне все еще нужно настроить экземпляр Redis для отправки журналов из нашего другого контроллера домена в этот ящик, но пока он работает впечатляюще.

Я хотел бы иметь предварительно упакованный стек ELK, содержащий Kibana 4. Этот пользовательский интерфейс намного чище, чем Kibana 3.

person JonasJSchreiber    schedule 23.03.2015