前言:当前所使用的版本是8.17.10,日志监控用elk就好了,为啥还要加个filebeat进来呢,因为多服务器等原因,被迫用了这个方案(当需要收集的日志分布在多个服务器时,就要用到足够轻量的中间件来收集了——filebeat),小弟目前是elk放同一台机子,filebeat放在需要收集日志的机子(微服务应用机子),对了,全部配置都是没有加上密码校验的,如需可以自行查资料对应配置就好了。话不多说,直接来!!!

1、elasticsearch安装

        1.1、小弟直接做成了一个独立的文档,直接打开以下的链接跟着操作就好了,包括了IK分词,直接就是一步到位!!!

        https://blog.csdn.net/qq_36252295/article/details/125041711

2、kibana安装

docker pull docker.1ms.run/elastic/kibana:8.17.10

2.1、拉取完毕,那么就创建对应的文件夹和文件,在/home下面执行命令

mkdir kibana && cd $_ && mkdir -p config && cd $_ 

2.2、当前应该是在config目录下了,那么需要创建一个kibana.yml文件,并把以下内容复制进去即可!

touch kibana.yml

注意:修改一下内容里面的es地址,正常是这样的:http://127.0.0.1:9200,按实际替换

server.host: "0.0.0.0"
server.shutdownTimeout: "5s"
elasticsearch.hosts: [ "http://输入您的内网ip,此处是配置es地址的:9200" ]

2.3、保存好配置文件后,那么就直接执行以下命令创建docker容器了

docker run -d -p 5601:5601 --name kibana --restart=always -v /home/kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml docker.1ms.run/elastic/kibana:8.17.10

2.4、直接访问:http://ip:5601,进行访问,可以访问就好了,后面会说如何创建数据视图的。注意:如果不能访问,可以使用docker logs kibana进行查看容器启动日志是否正常,如果链接不上es那么要检查配置文件的链接是否正确!!!

3、logstash安装

docker pull docker.1ms.run/elastic/logstash:8.17.10

3.1、拉取完毕,老规矩,先把需要挂载的文件夹和文件先创建好,在/home目录下执行

mkdir logstash && cd $_ && mkdir -p {config,pipeline}

3.2、进去config路径下创建文件夹并把内容复制进行,执行以下命令

touch logstash.yml

注意:要换成您的es访问地址,完整地址:http://127.0.0.1:9200

http.host: "0.0.0.0"
xpack.monitoring.elasticsearch.hosts: [ "http://您的内网ip:9200" ]

3.3、进入pipeline文件夹下面创建con文件,并配置对应的处理规则:输入、过滤、输出,以下是一个简单的例子,主要是用来收集java程序的日志。

touch logstash.conf

然后把以下的内容复制进去,并把修改对应的链接信息为您的信息,注意看里面的注释

# 输入
input {
  beats {
    port => 5044
  }
}

# 过滤
filter {
# 请注意这里用的javaLog,filebeat配置里面有用到
  if "javaLog" in [tags] {
    grok {
      match => { 
        "message" => "^%{TIMESTAMP_ISO8601:log_time} %{LOGLEVEL:log_level} \[%{DATA:thread_name}\] %{DATA:class_name}:%{NUMBER:line_number} - %{GREEDYDATA:log_content}" 
      }
      remove_field => ["message"]
    }

    # 转换日志时间戳为ES标准格式
    date {
      match => ["log_time", "yyyy-MM-dd HH:mm:ss,SSS"]
      target => "@timestamp"
      remove_field => ["log_time"]
    }

    # 生成索引前缀(按服务拆分)
    mutate {
      add_field => {
        "index_prefix" => "%{app_name}-logs"
      }
    }
  }
}

# 输出
output {
  elasticsearch {
# 修改为您的es链接地址
    hosts => ["http://127.0.0.1:9200"]  
    index => "%{index_prefix}-%{+YYYY.MM.dd}"
    ssl => false
  }
}

3.4、执行以下命令,进行容器的创建,如果需要加更多的应用监控可以在pipeline文件夹下面添加,但是要注意输入的端口,同样要对应映射出来,我们目前仅用到了5044,9600是检查其版本情况等信息。

docker run -d -p 5044:5044 -p 9600:9600 --name logstash --restart=always -v /home/logstash/config/logstash.yml:/usr/share/logstash/config/logstash.yml -v /home/logstash/pipeline:/usr/share/logstash/pipeline docker.1ms.run/elastic/logstash:8.17.10

3.5、启动完成后可以访问:http://ip:9600,进行版本的查看,启动失败,请使用docker logs logstash查看启动日志,一般都是es的连接问题,好了,正常的话,我们就可以直接使用:http://ip:5044进行日志的输入了。

4、filebeat安装

docker pull docker.1ms.run/elastic/filebeat:8.17.9

4.1、filebeat安装的话,可以安装去其它服务器,然后通过配置logstash进行日志传输,我们在/home下面创建filebeat的配置文件,执行以下命令

mkdir filebeat && cd $_ && mkdir -p config && cd $_ 

4.2、在/config目录下创建配置文件,然后把内容复制进行

touch filebeat.yml

请注意配置文件里面的注释,需要替换成您实际的信息
需要修改的是:filebeat.inputs里面的配置,其它都基本上不用动,或者您可以根据实际情况配置
id:应用名称

paths:应用对应的日志路径

fields:自定义字段,描述应用

tags:默认是javaLog,您也可以新增自己想要的,这样加了就可以在logstash配置里面获取并进行二次处理

filebeat.config:
  modules:
    path: ${path.config}/modules.d/*.yml
    reload.enabled: false

# 此处是配置需要收集日志的地址信息等,数组配置
filebeat.inputs:
  - type: filestream
    id: system-log-input
    enabled: true
    paths:
      - /home/projects/system/logs/ek-system/info.log
      - /home/projects/system/logs/ek-system/info.*.log
    multiline:
      pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
      negate: true
      match: after
    file_identity.path.enable: true
    clean_removed: true
    fields:
      app_name: "system"
      log_type: "system-service"
    fields_under_root: true
    tags: ["javaLog"]

processors:
  - add_cloud_metadata: ~
  - add_docker_metadata: ~

output.logstash:
# 这里需要改成您的logstash输入的地址和端口
  hosts: ["${LOGSTASH_HOSTS:127.0.0.1:5044}"]

如果您需要监控多个应用,可以在filebeat.inputs下面继续添加,如下:


  - type: filestream
    id: gateway-log-input
    enabled: true
    paths:
      - /home/projects/gateway/logs/info.log
      - /home/projects/gateway/logs/info.*.log
    multiline:
      pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
      negate: true
      match: after
    file_identity.path.enable: true
    clean_removed: true
    fields:
      app_name: "gateway"
      log_type: "gateway-service"
    fields_under_root: true
    tags: ["javaLog"]

4.3、由于filebeat的配置文件访问权限问题比较严格,所以我们需要修改以下这个文件的权限,执行以下命令

chmod 644 filebeat.yml

4.4、执行以下命令进行docker容器创建,对了,这里有一个点需要注意一下的,就是我们filebeat里面的收集日志的路径也是需要挂载出来的,不然是无法访问到,导致无法收集,您也可以直接挂载根目录就好了。具体的参数是:-v /home/projects/:/home/projects/,这样的话,我们的filebeat容器就能访问到/home/projects/下面的所有文件了

docker run --name filebeat --restart always --privileged=true -v /home/filebeat/config/filebeat.yml:/usr/share/filebeat/filebeat.yml -v /home/projects/:/home/projects/ -d docker.1ms.run/elastic/filebeat:8.17.9

4.5、filebeat是不需要端口的,直接查看启动日志查看是否连接logstash成功就好了,docker logs filebeat

5、打开kibana,查看并创建视图

5.1、查看日志在es的索引

5.2、创建日志视图

没有创建过的界面会有一个大大的功能选项:create data view

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐