使用Filebeat收集nginx日志,在Kibana上查看时,我需要调查仅错误日志中时间偏差的原因
环境和版本
AWS工作空间(Amazon Linux 2)
Elasticsearch 7.4.2
Kibana 7.4.2
Filebeat 7.4.2
nginx 1.16.1
结论:
因此,如果您想先知道結論,我會先說:
如果沒有將Docker容器的時區從默認的UTC更改,則沒有問題。
由於這次將Docker容器的時區更改為Asia/Tokyo,導致nginx的錯誤日誌在被導入Elasticsearch時,記錄的日期和時間被增加了9小時。
訪問日誌在Docker容器的時區更改與否都沒有問題。
如果将Docker容器的时区更改为Asia/Tokyo,则在filebeat.yml中添加以下设置。
processors:
- drop_fields.fields: ['event.timezone']
- add_fields:
target: event
fields:
timezone: 'Asia/Tokyo'
在访问日志中,日期会包含“+0900”,而错误日志中则没有。我认为这部分也与问题相关。
# アクセスログの日付部分:
[01/Dec/2019:20:37:31 +0900]
# エラーログの日付部分
2019/12/01 20:37:30
调查的内容
目录结构
/home/sano/dkwork2
|--es
| |--docker-compose.yml
| |--es
| | |--config
| | | |--elasticsearch.yml
| | |--data
| |--filebeat
| | |--config
| | | |--filebeat.yml
| | | |--nginx.yml
|--log
| |--nginx
| | |--access.log
| | |--error.log
|--nginx
| |--docker-compose.yml
version: '3.7'
services:
web:
container_name: web
image: nginx:1.16.1
ports:
- 81:80
volumes:
- ../log/nginx:/var/log/nginx
restart: unless-stopped
environment:
- "TZ=Asia/Tokyo"
version: '3.7'
services:
elasticsearch:
container_name: elasticsearch
image: docker.elastic.co/elasticsearch/elasticsearch:7.4.2
volumes:
- ./es/data:/usr/share/elasticsearch/data
- ./es/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
ports:
- 9200:9200
- 9300:9300
environment:
- ES_JAVA_OPTS=-Xms128m -Xmx128m
- discovery.type=single-node
restart: unless-stopped
kibana:
container_name: kibana
image: docker.elastic.co/kibana/kibana:7.4.2
ports:
- 5601:5601
depends_on:
- elasticsearch
restart: unless-stopped
开始
# Elasticsearch、Kibana
$ cd es
$ mkdir -p es/data
$ chmod 777 es/data
$ docker-compose up -d
# nginx
$ cd ..
$ cd nginx
$ docker-compose up -d
# ダッシュボード、インデックス、インデックスパターンのセットアップ
$ docker run \
--net=es_default \
docker.elastic.co/beats/filebeat:7.4.2 \
setup -E setup.kibana.host=kibana:5601 \
-E output.elasticsearch.hosts=["elasticsearch:9200"]
# Filebeat
$ cd ..
$ cd es
$ docker run -d \
--net=es_default \
--name=filebeat \
--user=root \
--volume="$(pwd)/filebeat/config/filebeat.yml:/usr/share/filebeat/filebeat.yml" \
--volume="$(pwd)/filebeat/config/nginx.yml:/usr/share/filebeat/modules.d/nginx.yml" \
--volume="/home/sano/dkwork2/log/nginx:/var/log/nginx/" \
--volume="/var/lib/docker/containers:/var/lib/docker/containers:ro" \
--volume="/var/run/docker.sock:/var/run/docker.sock:ro" \
docker.elastic.co/beats/filebeat:7.4.2 filebeat -e -strict.perms=false \
-E output.elasticsearch.hosts=["elasticsearch:9200"]
cluster.name: "docker-cluster"
network.host: 0.0.0.0
discovery.zen.minimum_master_nodes: 1
# ### x-pack functions
# xpack.security.enabled: false
# xpack.monitoring.enabled: true
# xpack.graph.enabled: false
# xpack.watcher.enabled: false
filebeat.config:
modules:
path: ${path.config}/modules.d/*.yml
reload.enabled: false
processors:
- drop_fields.fields: ['event.timezone']
- add_fields:
target: event
fields:
timezone: 'Asia/Tokyo'
output.elasticsearch:
hosts: ["elasticsearch:9200"]
- module: nginx
access:
enabled: true
var.paths: ["/var/log/nginx/access.log*"]
error:
enabled: true
var.paths: ["/var/log/nginx/error.log*"]
如果未更改时区
在nginx的docker-compose.yml中未指定环境变量”TZ”的情况下,以及在filebeat.yml中未添加时区设置的情况下。
@timestamp Dec 1, 2019 @ 19:50:21.000
event.created Dec 1, 2019 @ 19:50:24.533
suricata.eve.timestamp Dec 1, 2019 @ 19:50:21.000
event.timezone +00:00
@timestamp Dec 1, 2019 @ 19:50:21.000
event.created Dec 1, 2019 @ 19:50:24.532
suricata.eve.timestamp Dec 1, 2019 @ 19:50:21.000
event.timezone +00:00
如果更改时区(filebeat配置没有更改)
以下是中文翻译:
・filebeat.yml中没有添加时区设置
・在nginx的docker-compose.yml中添加以下设置
environment:
- "TZ=Asia/Tokyo"
@timestamp Dec 2, 2019 @ 04:54:30.000
event.created Dec 1, 2019 @ 19:54:39.539
suricata.eve.timestamp Dec 2, 2019 @ 04:54:30.000
event.timezone +00:00
@timestamp Dec 1, 2019 @ 19:54:30.000
event.created Dec 1, 2019 @ 19:54:39.538
suricata.eve.timestamp Dec 1, 2019 @ 19:54:30.000
event.timezone +00:00
如果更改了时区(filebeat的设置已更改)
在filebeat.yml中添加以下配置
processors:
- drop_fields.fields: ['event.timezone']
- add_fields:
target: event
fields:
timezone: 'Asia/Tokyo'
@timestamp Dec 1, 2019 @ 20:37:30.000
event.created Dec 1, 2019 @ 20:38:12.812
suricata.eve.timestamp Dec 1, 2019 @ 20:37:30.000
event.timezone Asia/Tokyo
@timestamp Dec 1, 2019 @ 20:37:30.000
event.created Dec 1, 2019 @ 20:38:12.812
suricata.eve.timestamp Dec 1, 2019 @ 20:37:30.000
event.timezone Asia/Tokyo
以下为2019年12月3日的附加说明。
nginx的Docker容器的时区设置为”Asia/Tokyo”,Filebeat的Docker容器的时区也设置为”Asia/Tokyo”。
在没有添加时区设置的情况下,对filebeat.yml文件进行修改。
可以通过在filebeat的docker run命令中添加「-e TZ=Asia/Tokyo」来启动。
@timestamp Dec 3, 2019 @ 00:15:40.000
event.created Dec 3, 2019 @ 00:15:45.253
suricata.eve.timestamp Dec 3, 2019 @ 00:15:40.000
event.timezone +09:00
@timestamp Dec 3, 2019 @ 00:15:38.000
event.created Dec 3, 2019 @ 00:15:45.253
suricata.eve.timestamp Dec 3, 2019 @ 00:15:38.000
event.timezone +09:00