Тема: Elasticsearch Logstash Kibana (AWS)
Есть такой замечательный сервис, можно и самому поднять, дело вкуса и финансов.
what-is-amazon-elasticsearch-service
Так вот, задача с балансеров и веб серверов собрать статистику, и что-то с ней сделать. Например проанализировать. Вся статистика это nginx access/error лог и haproxy модифицированный лог.
Как настраивать ELK не рассматриваю, все описано хорошо у AWS если брать как сервис и тут elastic guide если делать у себя. Приступаем сразу к отправки логов в ELK. Для этого я использую Filebeat
cat /etc/filebeat/filebeat.yml
filebeat:
prospectors:
- tags:
- haproxy
paths:
- /var/log/haproxy.log
pipeline: haproxy
input_type: log
fields_under_root: true
fields:
document_type: syslog
output:
elasticsearch:
hosts: ["https://elk:443"]
logging:
to_syslog: true
to_files: false
level: warning
"pipeline: haproxy" появилось в новых версиях, ingest, раньше получающий сервис парсил все что приходит, теперь надо указать по какому правилу должен проходить данный лог в grok фильтре.
Лог у меня не стандартный и мне надо только 2 IP
Nov 3 12:52:49 group-lb-1 haproxy[574]: 1.1.1.1 2.2.2.2 [03/Nov/2017:12:52:49.088] http~ backend_main/server-1 6/0/1/7/14 200 169 - - ---- 16/16/0/1/0 0/0 "GET /api/aaa HTTP/1.1"
Для этого создаем и по API закачиваем все фильтры на сервер
curl -XPUT 'https://elk:443/_ingest/pipeline/haproxy?pretty' -H 'Content-Type: application/json' -d'
{
"description" : "haproxy grok",
"processors": [
{
"grok": {
"field": "message",
"patterns": [
".*haproxy.*: (%{IP:client_ip1}(:[0-9]+)? (%{IP:client_ip2}|-)?.*|.*)"
]
}
}
]
}
'
curl -XPUT 'https://elk:443/_ingest/pipeline/nginx?pretty' -H 'Content-Type: application/json' -d'
{
"description" : "nginx grok",
"processors": [
{
"grok": {
"field": "message",
"patterns": [
"%{IPORHOST:nginx.access.remote_ip} - %{DATA:nginx.access.user_name} \\[%{HTTPDATE:nginx.access.time}\\] \"%{WORD:nginx.access.method} %{DATA:nginx.access.url} HTTP/%{NUMBER:nginx.access.http_version}\" %{NUMBER:nginx.access.response_code} %{NUMBER:nginx.access.body_sent.bytes} \"%{DATA:nginx.access.referrer}\" \"%{DATA:nginx.access.agent}\""
]
}
}
]
}
'
Еще можно много чего сделать по тому же API
Удалить индекс
curl -XDELETE 'https://elk:443/filebeat-*'
Положить
curl -XPUT 'https://elk:443/_template/filebeat' -d@/etc/filebeat/filebeat.template.json
Посмотреть
curl -XGET 'https://elk:443/*?pretty'
curl -XGET 'https://elk:443/filebeat-2017.11.03/_search?pretty'
curl -XGET 'https://elk:443/_ingest/pipeline/haproxy?pretty'
Все, проверяем
curl -XGET 'https://elk:443/filebeat-2017.11.03/_search?q=tags:haproxy&pretty'
...
{
"_index" : "filebeat-2017.11.03",
"_type" : "doc",
"_id" : "AV-BNurLw3Lo4q9lqhOD",
"_score" : 4.569596,
"_source" : {
"offset" : 5005488,
"input_type" : "log",
"source" : "/var/log/haproxy.log",
"message" : "Nov 3 09:29:35 ... HTTP/1.1\"",
"type" : "log",
"client_ip1" : "1.1.1.1",
"client_ip2" : "2.2.2.2",
"tags" : [
"haproxy"
],
"@timestamp" : "2017-11-03T09:29:35.911Z",
"beat" : {
"hostname" : "group-lb-1",
"name" : "group-lb-1",
"version" : "5.6.3"
},
"document_type" : "syslog"
}
...
Добавлено: 19-12-2017 12:02:26