Журнал доступа Nginx
Вот инструкции по использованию журналов доступа Nginx. Как правило, формат необходимо определить в основном файле конфигурации nginx.conf:
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" $request_time';
скопировать код
Приведенный выше формат основан на формате по умолчанию, и я добавил один$request_time
.
Затем подконфигурация использует:
access_log logs/myapp.log main;
скопировать код
Вот и все.
Filebeat собирает данные журнала для ElasticSearch
Конфигурация:
su -e elk
cd /usr/local/elk
vim beats/filebeat/filebeat.test_nginx.yml
скопировать код
Детали конфигурации:
filebeat.prospectors:
- type: log
input_type: log
paths:
- /work/yphp/nginx/logs/*.log
tags: ["ngx", "yujc"]
fields:
logIndex: nginx
docType: nginx-access
fields_under_root: true
tail_files: false
output.elasticsearch:
hosts: ["127.0.0.1:9200"]
index: "test-nginx-%{+yyyy.MM.dd}"
скопировать код
Инструкции по настройке:
filebeat.prospectors:
- тип тип журнала, журнал по умолчанию
- input_type тип ввода, журнал по умолчанию
- Журналы, собранные путями, могут использовать подстановочные знаки. поддерживает несколько
- tags Пользовательские теги, массив. настроить
- поля настраиваемые поля
- fields_under_root Добавляются ли настраиваемые поля к корню. Если false, имя ключа поля конфигурации полей — fields
- Начинают ли tail_files собирать с конца
- пользовательское поле document_type, используемое в Logsatsh для различения источников, использование переменных в Logsatsh
type
выражать
output.elasticsearch:
- хосты настраивают узлы ES, формат массива, поддерживает несколько.
- index Настроить индекс ES. Не настраивать использовать по умолчанию filebeat-*
- протокол настроить протокол, например http, https
- имя пользователя Настройте имя пользователя ES, например, elastic
- пароль настроить пароль ES, например changeme
Установите права на 600 и запустите файлбит:
chmod -R 600 beats/filebeat/filebeat.test_nginx.yml
./beats/filebeat/filebeat -c beats/filebeat/filebeat.test_nginx.yml
скопировать код
Затем зайдите в приложение Nginx, чтобы узнать, добавил ли ES индекс:
$ curl http://127.0.0.1:9200/_cat/indices?v | grep test-nginx
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
105 1161 105 1161 0 0 123k 0 --:--:-- --:--:-- --:--:-- 125k
yellow open test-nginx-2018.09.24 ArxrVVOkTjG8ZlXJjb9bVg 5 1 1 0 11.6kb 11.6kb
скопировать код
Давайте посмотрим на часть данных:
$ curl http://127.0.0.1:9200/test-nginx-2018.09.24/_search?q=*&size=1
{
"_index": "test-nginx-2018.09.24",
"_type": "doc",
"_id": "AWYKkBqtJzfnbYlB_DRX",
"_version": 1,
"_score": null,
"_source": {
"@timestamp": "2018-09-24T07:51:43.140Z",
"beat": {
"hostname": "2106567e5bce",
"name": "2106567e5bce",
"version": "5.6.2"
},
"docType": "nginx-access",
"input_type": "log",
"logIndex": "nginx",
"message": "172.16.10.1 - - [24/Sep/2018:07:51:40 +0000] \"GET /?time=22 HTTP/1.1\" 200 97991 \"-\" \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36\" \"-\" 0.009",
"offset": 5243,
"source": "/work/yphp/nginx/logs/hello71.log",
"tags": [
"ngx",
"yujc"
],
"type": "log"
},
"fields": {
"@timestamp": [
1537775503140
]
},
"sort": [
1537775503140
]
}
скопировать код
Вы видите, что данные уже есть. Но содержимое лога в целом (полеmessage
) вверх.
Filebeat собирает данные журнала, фильтрует Logstash и отправляет их в ElasticSearch.
Конфигурация:
su -e elk
cd /usr/local/elk
vim beats/filebeat/filebeat.test_nginx2.yml
скопировать код
Детали конфигурации:
filebeat.prospectors:
- type: log
input_type: log
paths:
- /work/yphp/nginx/logs/*.log
tags: ["ngx", "yujc"]
fields:
logIndex: nginx
docType: nginx-access
fields_under_root: true
tail_files: false
output.logstash:
hosts: ["127.0.0.1:5044"]
скопировать код
Настроить логсташ
su -e elk
cd /usr/local/elk
vim logstash/config/conf.d/filebeat.conf
скопировать код
Детали конфигурации:
input {
beats {
port => 5044
}
}
filter {
grok {
match => { "message" => "%{IPORHOST:remote_ip} - %{DATA:user_name} \[%{HTTPDATE:time}\] \"%{WORD:method} %{DATA:url} HTTP/%{NUMBER:http_version}\" %{NUMBER:response_code} %{NUMBER:body_sent:bytes} \"%{DATA:referrer}\" \"%{DATA:agent}\" \"%{DATA:x_forwarded_for}\" %{NUMBER:request_time}" }
remove_field => "message"
}
}
output {
elasticsearch {
hosts => ["127.0.0.1:9200"]
index => "test-nginx2-%{type}-%{+YYYY.MM.dd}"
document_type => "%{type}"
}
stdout { codec => rubydebug }
}
скопировать код
Формат журнала nginx, который я использую, заключается в добавлении 2 полей к стандартному формату.$http_x_forwarded_for
а также$request_time
:
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" $request_time';
скопировать код
Пример журнала:
172.16.10.1 - - [24/Sep/2018:09:04:40 +0000] "GET /?time=2244 HTTP/1.1" 200 98086 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36" "-" 0.002
скопировать код
Приведенное выше выражение grok:
%{IPORHOST:remote_ip} - %{DATA:user_name} \[%{HTTPDATE:time}\] \"%{WORD:method} %{DATA:url} HTTP/%{NUMBER:http_version}\" %{NUMBER:response_code} %{NUMBER:body_sent:bytes} \"%{DATA:referrer}\" \"%{DATA:agent}\" \"%{DATA:x_forwarded_for}\" %{NUMBER:request_time}
скопировать код
мы сначала используемGrok DebuggerВ онлайн-отладке инструмента проверьте правильность написанного grok. Я запустил его без тестирования до этого и обнаружил, что в grok в ES нет анализируемого поля, а затем я увидел вывод filebeat в командной строке (работает на переднем плане):
$ ./beats/filebeat/filebeat -c beats/filebeat/filebeat.test_nginx2.yml
{
"@timestamp" => 2018-09-24T09:01:19.555Z,
"logIndex" => "nginx",
"offset" => 6467,
"docType" => "nginx-access",
"@version" => "1",
"input_type" => "log",
"beat" => {
"name" => "2106567e5bce",
"hostname" => "2106567e5bce",
"version" => "5.6.2"
},
"host" => "2106567e5bce",
"source" => "/work/yphp/nginx/logs/hello71.log",
"message" => "172.16.10.1 - - [24/Sep/2018:09:01:14 +0000] \"GET /?time=2244 HTTP/1.1\" 200 98087 \"-\" \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36\" \"-\" 0.195",
"type" => "log",
"tags" => [
[0] "ngx",
[1] "yujc",
[2] "beats_input_codec_plain_applied",
[3] "_grokparsefailure"
]
}
скопировать код
Последний намек_grokparsefailure
, что указывает на проблему с частью grok. Поскольку это справочное онлайн-руководство, и я только что с ним столкнулся, я не знаю, как его настроить.. Отладка filebeat.conf заняла много времени, прежде чем он вступил в силу.
мы открытыGrok Debugger, первое поле ввода вводит содержимое исходного поля сообщения сообщения, собранного filebeat, а второе поле ввода вводит выражение grok:
Нажмите кнопку «Перейти», чтобы выполнить анализ. Если следующее{}
Объясните, что синтаксический анализ завершился неудачно, затем вы можете изменить выражение, и инструмент проанализирует его автоматически. Окончательный результат разбора:
{
"remote_ip": [
[
"172.16.10.1"
]
],
"HOSTNAME": [
[
"172.16.10.1"
]
],
"IP": [
[
null
]
],
"IPV6": [
[
null
]
],
"IPV4": [
[
null
]
],
"user_name": [
[
"-"
]
],
"time": [
[
"24/Sep/2018:08:47:59 +0000"
]
],
"MONTHDAY": [
[
"24"
]
],
"MONTH": [
[
"Sep"
]
],
"YEAR": [
[
"2018"
]
],
"TIME": [
[
"08:47:59"
]
],
"HOUR": [
[
"08"
]
],
"MINUTE": [
[
"47"
]
],
"SECOND": [
[
"59"
]
],
"INT": [
[
"+0000"
]
],
"method": [
[
"GET"
]
],
"url": [
[
"/?time=2244"
]
],
"http_version": [
[
"1.1"
]
],
"BASE10NUM": [
[
"1.1",
"200",
"98086",
"0.002"
]
],
"response_code": [
[
"200"
]
],
"body_sent": [
[
"98086"
]
],
"referrer": [
[
"-"
]
],
"agent": [
[
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"
]
],
"x_forwarded_for": [
[
"-"
]
],
"request_time": [
[
"0.002"
]
]
}
скопировать код
Затем вы можете запустить logstash.
Проверьте, проходит ли конфигурация logstash:
./logstash/bin/logstash -f logstash/config/conf.d/filebeat.conf --config.test_and_exit
Config Validation Result: OK. Exiting Logstash
скопировать код
# 启动logstash
./logstash/bin/logstash &
# 启动filebeat
./beats/filebeat/filebeat -c beats/filebeat/filebeat.test_nginx2.yml
скопировать код
Мы снова посещаем приложение Nginx, а затем просматриваем часть данных:
$ curl http://127.0.0.1:9200/test-nginx2-log-2018.09.24/_search?q=*&size=1&sort=@timestamp:desc
{
"took": 14,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 3,
"max_score": null,
"hits": [
{
"_index": "test-nginx2-log-2018.09.24",
"_type": "log",
"_id": "AWYK0to8JzfnbYlB_DRx",
"_score": null,
"_source": {
"response_code": "200",
"agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36",
"logIndex": "nginx",
"offset": 6875,
"method": "GET",
"docType": "nginx-access",
"user_name": "-",
"input_type": "log",
"http_version": "1.1",
"source": "/work/yphp/nginx/logs/hello71.log",
"message": """172.16.10.1 - - [24/Sep/2018:09:04:40 +0000] "GET /?time=2244 HTTP/1.1" 200 98086 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36" "-" 0.002""",
"type": "log",
"url": "/?time=2244",
"tags": [
"ngx",
"yujc",
"beats_input_codec_plain_applied"
],
"x_forwarded_for": "-",
"referrer": "-",
"@timestamp": "2018-09-24T09:04:40.404Z",
"remote_ip": "172.16.10.1",
"request_time": "0.002",
"@version": "1",
"beat": {
"name": "2106567e5bce",
"hostname": "2106567e5bce",
"version": "5.6.2"
},
"host": "2106567e5bce",
"body_sent": "98086",
"time": "24/Sep/2018:09:04:40 +0000"
},
"sort": [
1537779880404
]
}
]
}
}
скопировать код
Он содержит все поля, которые мы проанализировали.
Посмотреть в кибане
Откройте веб-адрес kibana: http://127.0.0.1:5601 и откройте последовательно:Management
-> Kibana
-> Index Patterns
,выберитеCreate Index Pattern
:
A. Ввод шаблона индекса:test-nginx2-*
;
b. Выбор имени поля фильтра времени@timestamp
.
в) Нажмите «Создать».
Затем откройте Discover и выберите filebeat-*, чтобы просмотреть данные журнала.
Подробные поля можно увидеть:
Ссылаться на
1. Logstash использует grok для фильтрации логов nginx (2) - Orgliny - Blog Park
https://www.cnblogs.com/Orgliny/p/5592186.html
2. Построение сервиса логов Rsyslog - K'e0llm - Blog Park
http://www.cnblogs.com/Eivll0m/p/6700828.html
3. Как обрабатывать сопоставление данных с ElasticSearch в Logstash — Cocowool — Blog Park
https://www.cnblogs.com/cocowool/p/7347069.html
4. Установка Logstash и Filebeat и настройка архитектуры ELK - Cricket in the pastoral - Blog Park
http://www.cnblogs.com/xishuai/p/elk-logstash-filebeat.html
5. Создайте платформу анализа журналов ELK (ниже) — создайте сервер kibana и logstash — ноль бактерий — Блог 51CTO
http://blog.51cto.com/zero01/2082794
Заявление об авторских правах: Перепечатка или специальное заявление не указываются как оригинальная работа автора. В этой статье используется следующее соглашение для авторизации,Бесплатная перепечатка — некоммерческая — не производная — сохранить авторство | Creative Commons BY-NC-ND 3.0, просьба указывать автора и источник при перепечатке.
Автор: Feihongying~
Источник:http://52fhy.cnblogs.com/
рекомендовать! Всего за 2,50 доллара в месяц вы можете получить VPS с SSD!
[рекомендовать]Redis Deep Adventure: основные принципы и практика применения
Чистая сушка! Краткое изложение практики Redis в крупных интернет-компаниях в сочетании с практическими задачами для подробного объяснения внутреннего механизма Redis!