#nginx #kubernetes #logstash #host #filebeat
#nginx #kubernetes #logstash #хост #filebeat
Вопрос:
Теперь с помощью filebeat и logstash отправка журнала json nginx в k8s.
Конфигурация nginx нравится
nginx.conf
http {
log_format bucket escape=json
'{'
'"request_id": "$request_id",'
'"method": "$request_method",'
'"status": "$status",'
'"forwarded_for": "$http_x_forwarded_for",'
'"host": "$host",'
'"url": "$request_uri",'
'"referer": "$http_referer",'
'"remote_ip": "$remote_addr",'
'"server_ip": "$server_addr",'
'"user_agent": "$http_user_agent",'
'}';
}
server {
access_log /var/log/nginx/access.json bucket;
}
Конфигурация Filebeat:
filebeat.yml
filebeat.shutdown_timeout: 5s filebeat.inputs: - type: log enabled: true paths: - /var/log/nginx/access.json* exclude_files: ['.gz Здесь
overwirte_keys
верно, поэтому он должен перезаписывать метаданные, верно? Конфигурация Logstash: logstash.confinput { beats { port => 5044 } } filter { if "access" in [tags] { mutate { add_field => { "[@metadata][tags]" => "%{tags}" } remove_field => [ "agent", "event", "service", "log", "input", "fileset", "ecs", "container", "kubernetes", "@timestamp", "@version", "message", "tags" ] } } } output { if "access" in [@metadata][tags] { google_cloud_storage { bucket => "nginx_logs" json_key_file => "/secrets/service_account/credentials.json" temp_directory => "/tmp/nginx_logs" log_file_prefix => "logstash_nginx_logs" max_file_size_kbytes => 1024 output_format => "json" date_pattern => "%Y-%m-%dT%H:00" flush_interval_secs => 2 gzip => false gzip_content_encoding => false uploader_interval_secs => 60 include_uuid => true include_hostname => true } } }
Вначале это работает хорошо. Данные журнала были сгенерированы в файлы json как:
{"user_agent":"Mozilla/5.0 (iPhone; CPU iPhone OS 14_2_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 [FBAN/FBIOS;FBDV/iPhone13,1;FBMD/iPhone;FBSN/iOS;FBSV/14.2.1;FBSS/3;FBID/phone;FBLC/ja_JP;FBOP/5]","forwarded_for":"1.2.3.4","host":"api.mysite.com","method":"OPTIONS","request_id":"0127054b954fe4973852e1886130a6ca","referer":"https://www.world.com/","remote_ip":"2.3.4.5","server_ip":"3.4.5.6","status":"204","url":"/api/v1/post"}
Но недавно эти данные появились:
{"user_agent":"Mozilla/5.0 (iPhone; CPU iPhone OS 14_2_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 [FBAN/FBIOS;FBDV/iPhone13,1;FBMD/iPhone;FBSN/iOS;FBSV/14.2.1;FBSS/3;FBID/phone;FBLC/ja_JP;FBOP/5]","forwarded_for":"1.2.3.4","host":"api.mysite.com","method":"OPTIONS","request_id":"0127054b954fe4973852e1886130a6ca","referer":"https://www.world.com/","remote_ip":"2.3.4.5","server_ip":"3.4.5.6","status":"204","url":"/api/v1/post"} {"host":{"name":"filebeat-adio3"}} {"host":{"name":"filebeat-adio3"}} {"host":{"name":"filebeat-adio3"}}
Это не обычные данные. Похоже,
host
что метаданные сервера filebeat были отправлены. Но почему? Это ошибка filebeat или logstash?
Есть ли другой хороший способ отфильтровать данные этого хоста, чтобы гарантировать, что они будут отправлены без конфликта с метаданными fb / logstash?
Комментарии:
1. Это {"host":{"name":"filebeat-adio3"}}
единственное и полное содержимое документа или есть дополнительная информация? Если да, можете ли вы поделиться им полностью?
2. {"host":{"name":"filebeat-adio3"}}
иногда это единственное содержимое. Я обновил свой вопрос.
3. Итак, просто для ясности, это содержимое можно найти в /var/log/nginx/access.json
?
4. Трудно найти старые файлы о nginx, поскольку его ротация журнала составляет одну неделю. Но, похоже, проблема возникла после того, как мы развернули новую функцию на прошлой неделе. В то время, возможно, что-то пошло не так (но не уверен, были ли это данные nginx или fb / logstash). В наши дни такого рода данные больше не повторялись.
5. Хорошо, не стесняйтесь обновлять этот поток, если это произойдет снова
]
tags: ["access"]
processors:
- decode_json_fields:
fields: ["message"]
process_array: true
max_depth: 1
target: ""
overwrite_keys: true
add_error_key: false
output.logstash:
Здесь
hosts: ["logstash.default.svc.cluster.local:5044"]
overwirte_keys
верно, поэтому он должен перезаписывать метаданные, верно?
Конфигурация Logstash:
logstash.conf
Вначале это работает хорошо. Данные журнала были сгенерированы в файлы json как:
Но недавно эти данные появились:
Это не обычные данные. Похоже, host
что метаданные сервера filebeat были отправлены. Но почему? Это ошибка filebeat или logstash?
Есть ли другой хороший способ отфильтровать данные этого хоста, чтобы гарантировать, что они будут отправлены без конфликта с метаданными fb / logstash?
Комментарии:
1. Это
{"host":{"name":"filebeat-adio3"}}
единственное и полное содержимое документа или есть дополнительная информация? Если да, можете ли вы поделиться им полностью?2.
{"host":{"name":"filebeat-adio3"}}
иногда это единственное содержимое. Я обновил свой вопрос.3. Итак, просто для ясности, это содержимое можно найти в
/var/log/nginx/access.json
?4. Трудно найти старые файлы о nginx, поскольку его ротация журнала составляет одну неделю. Но, похоже, проблема возникла после того, как мы развернули новую функцию на прошлой неделе. В то время, возможно, что-то пошло не так (но не уверен, были ли это данные nginx или fb / logstash). В наши дни такого рода данные больше не повторялись.
5. Хорошо, не стесняйтесь обновлять этот поток, если это произойдет снова