ELK”是三个开源项目的首字母缩写,这三个项目分别是:Elasticsearch、Logstash 和 Kibana。Elasticsearch 是一个搜索和分析引擎。Logstash 是服务器端数据处理管道,能够同时从多个来源采集数据,转换数据,然后将数据发送到诸如 Elasticsearch 等“存储库”中。Kibana 则可以让用户在 Elasticsearch 中使用图形和图表对数据进行可视化。


version: '3.4'
services:
    elasticsearch:
        image: "docker.elastic.co/elasticsearch/elasticsearch:${ES_VERSION}"
        environment:
        		# 将ES的集群发现模式配置为单节点模式
            - discovery.type=single-node
        volumes:
		        # Docker容器中时间和宿主机同步
            - /etc/localtime:/etc/localtime
            # 将ES的数据映射并持久化至宿主机中
            - ./docker_es/data:/usr/share/elasticsearch/data
        ports:
            - "9200:9200"
            - "9300:9300"
    logstash:
        depends_on:
            - elasticsearch
        image: "docker.elastic.co/logstash/logstash:${ES_VERSION}"
        volumes:
        		# logstash 配置
            - ./logstash.conf:/usr/share/logstash/pipeline/logstash.conf
        ports:
            - "5044:5044"
        links:
            - elasticsearch
    kibana:
        depends_on:
            - elasticsearch
        image: "docker.elastic.co/kibana/kibana:${ES_VERSION}"
        environment:
            - ELASTICSEARCH_URL=http://elasticsearch:9200
        volumes:
        		# Docker容器中时间和宿主机同步
            - /etc/localtime:/etc/localtime
        ports:
            - "5601:5601"
        links:
            - elasticsearch
    filebeat:
        depends_on:
            - elasticsearch
            - logstash
        image: "docker.elastic.co/beats/filebeat:${ES_VERSION}"
        user: root # 必须为root,否则会因为无权限而无法启动
        environment:
            - strict.perms=false
        volumes:
        		# filebeat 配置文件
            - ./filebeat.yml:/usr/share/filebeat/filebeat.yml:ro
            # 映射到容器中[作为数据源]
            - ./docker_es/filebeat/logs:/usr/share/filebeat/logs:rw
            # 这里存储 filebeat 的状态 如果缺少状态每次重启 filebeat 都会拉去全量匹配的日志
            - ./docker_es/filebeat/data:/usr/share/filebeat/data:rw
        # 将指定容器连接到当前连接,可以设置别名,避免ip方式导致的容器重启动态改变的无法连接情况
        links:
            - logstash
ES_VERSION=7.1.0 # 设置 docker-compose 的环境变量
filebeat.inputs:
# 输入filebeat的类型,包括log(具体路径的日志),stdin(键盘输入),redis,udp,docker,tcp,syslog,可以同时配置多个(包括相同类型的)
# 具体的每种类型的配置信息可以通过官网:https://www.elastic.co/guide/en/beats/filebeat/current/configuration-filebeat-options.html 了解
  - type: log
  	# 配置是否生效
    enabled: true
    paths:
      # 容器中目录下的所有.log文件
      - /usr/share/filebeat/logs/*.log
    # 额外添加的tag标签
    tags: ["mylog"]
    # 向输出的每一条日志添加额外的信息,比如“appname:xapp”,方便后续对日志进行分组统计。
  	# 默认情况下,会在输出信息的fields子目录下以指定的新增fields建立子目录,例如fields.appname
  	# 这个的意思就是会在es中多添加一个字段,格式为 "filelds":{"appname":"xapp"}
    fields: 
      appname: "xapp"
# 加载 module 没有特殊需要无需调整
filebeat.config.modules:
  path: ${path.config}/modules.d/*.yml
  # 是否允许重新加载
  reload.enabled: false
  # 重新加载的时间间隔()
  #reload.period: 10s
# Elasticsearch模板配置
setup.template.settings:
	# 数据分片数
  index.number_of_shards: 1
  
# 是否启用仪表盘
setup.dashboards.enabled: false
# kibana 配置
setup.kibana:
	# kibana地址
  host: "http://kibana:5601"
# 直接传输至ES
#output.elasticsearch:
# hosts: ["http://es-master:9200"]
# index: "filebeat-%{[beat.version]}-%{+yyyy.MM.dd}"
# 传输至LogStash
output.logstash:
  hosts: ["logstash:5044"]
processors:
	# 主机相关 信息
  - add_host_metadata: ~
  # 云服务器的元数据信息,包括阿里云ECS 腾讯云QCloud AWS的EC2的相关信息 
  - add_cloud_metadata: ~	
input {
  # 来源beats
  beats {
      # 端口
      port => "5044"
  }
}
filter {
    json {
        source => "message" # 从 message 解析
        remove_field => "message"  # 丢弃掉日志中的 message 字段
        target => "logdata" # 将 json 解析出的数据 输出到 logdata 字段
    }
    date {
    		# 将 ts 的数据取出 通过 "UNIX_MS", "yyyy-MMM-dd'T'HH:mm:ss.SSS+0800", "ISO8601" 三种匹配模式 匹配数据
        match => ["ts","UNIX_MS", "yyyy-MMM-dd'T'HH:mm:ss.SSS+0800", "ISO8601"]
        remove_field => "ts"  # 丢弃掉日志中的 ts 字段
    }
}
output {
  # 输出到 es
  elasticsearch {
    hosts => ["http://elasticsearch:9200"]
    # 设置索引为 fields 字段 下的 appname 字段 拼上 日期 ( [fields][appname] 由 filebeat 传入,也可以在日志中加入 app_name 字段用于区分服务)
    index => "%{[fields][appname]}-%{+YYYY-MM-dd}"
  }
  # 输出到命令行 用于debug
  stdout { codec => rubydebug }
}


点击 Discover 查看日志

好好学习,天天向上