使用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
广告
将在 10 秒后关闭
bannerAds