EFK_部署文档


EFK_部署文档

说明

  1. 注意各个组件的版本。
  2. 这里 Elasticsearch 的版本为:elasticsearch-7.8.0-linux-x86_64.tar.gz。
  3. IK 的版本为:elasticsearch-analysis-ik-7.8.0.zip。
  4. Kibana 的版本为:kibana-7.8.0-linux-x86_64.tar.gz。
  5. FileBeat 的版本为:filebeat-7.17.0-linux-x86_64.tar.gz。

Elasticsearch

  1. 把对应的包放到指定的文件夹,解压,命名。

  2. 修改 config 里的配置文件 elasticsearch.yml。

    1. cluster.name: es
    2. node.name: node-1
    3. network.host: 0.0.0.0
    4. cluster.initial_master_nodes: [“node-1”]
  3. 修改 config 里的配置文件 jvm.options。

    1. -Xms512m
    2. -Xmx512m
  4. 修改 /etc/security/ 路径下的配置文件 limits.conf。(文件末尾追加,前面带 * 号)

    • soft nproc 65535
    • hard nproc 65535
    • soft nofile 65535
    • hard nofile 65535
    • es_user soft nofile 65535
    • es_user hard nofile 65535
  5. 修改 /etc/ 路径下的配置文件 sysctl.conf。(修改后执行:sysctl -p)

    vm.max_map_count=655360

  6. 创建新的用户 ekl。(Elasticsearch)不能使用 root 用户启动。(这里直接把对应文件夹下的文件都赋值给了 elk 用户。)

    1. adduser elk
    2. passwd elk
    3. chown -R elk:elk /usr/local/elk/*
    4. su elk

IK

  1. 在 Elasticsearch 的 plugins 目录下,创建 ik 文件夹。
  2. 把 elasticsearch-analysis-ik-7.8.0.zip 放到 ik 文件夹内。
  3. unzip elasticsearch-analysis-ik-7.8.0.zip (解压)。
  4. 进入 Elasticsearch 的 bin目录下,执行 ./elasticsearch -d 命令。(后台启动 Elasticsearch )

Kibana

  1. 把对应的包放到指定的文件夹,解压,命名。

  2. 修改 config 里的配置文件 kibana.yml。

    1. server.port: 5601
    2. server.host: “0.0.0.0”
    3. elasticsearch.hosts: [“ip:端口”]
    4. i18n.locale: “zh-CN”
  3. 进入 Kibana 的 bin 目录下,执行 ./kibana & 命令。(后台启动 Kibana)

FileBeat

  1. 把对应的包放到指定的文件夹,解压,命名。
  2. 修改配置文件 filebeat.yml。(进入到文件目录下就能看到)

拦截单条日志

filebeat.inputs:
# 日志类型
- type: log
  enabled: true
  # 日志路径
  paths:
    - /home/back/reachx/client/logs/rhx-client-info.log
    # 日志形式(elasticsearch 自动生成索引使用)
  fields:
    index: client-info
    # 编码
  encoding: utf-8
  # 指定日志匹配条件
  multiline.pattern: '^\d{4}'
  # 定义模式是否被否定
  multiline.negate: true
  # 日志合并位置
  multiline.match: after

# 关闭 filebeat 自动管理索引的生命周期
setup.ilm.enabled: false

# kibana 配置
setup.kibana:
  host: "localhost:5601"

# elasticsearch 配置
output.elasticsearch:
  enabled: true
  hosts: ["localhost:9200"]
  # 索引生成
  indices:
    - index: "client-info-%{+yyyy-MM-dd}"
    # 匹配到对应关键字,生成指定索引
      when.equals:
        fields:
          index: "client-info"
  # 账号和密码,使用默认的配置
  username: "elastic"
  password: "changeme"

连接多条配置

filebeat.inputs:
# 日志类型
- type: log
  enabled: true
  # 日志路径
  paths:
    - /home/back/reachx/client/logs/rhx-client-info.log
    # 日志形式(elasticsearch 自动生成索引使用)
  fields:
    index: client-info
    # 编码
  encoding: utf-8
  # 指定日志匹配条件
  multiline.pattern: '^\d{4}'
  # 定义模式是否被否定
  multiline.negate: true
  # 日志合并位置
  multiline.match: after

- type: log
  enabled: true
  paths:
    - /home/back/reachx/client/logs/rhx-client-error.log
  fields:
    index: client-error
  encoding: utf-8
  multiline.pattern: '^\d{4}'
  multiline.negate: true
  multiline.match: after

- type: log
  enabled: true
  paths:
    - /home/back/reachx/file/logs/rhx-file-info.log
  fields:
    index: file-info
  encoding: utf-8
  multiline.pattern: '^\d{4}'
  multiline.negate: true
  multiline.match: after

- type: log
  enabled: true
  paths:
    - /home/back/reachx/file/logs/rhx-file-error.log
  fields:
    index: file-error
  encoding: utf-8
  multiline.pattern: '^\d{4}'
  multiline.negate: true
  multiline.match: after

# 关闭 filebeat 自动管理索引的生命周期
setup.ilm.enabled: false

# kibana 配置
setup.kibana:
  host: "localhost:5601"

# elasticsearch 配置
output.elasticsearch:
  enabled: true
  hosts: ["localhost:9200"]
  # 索引生成
  indices:
    - index: "client-info-%{+yyyy-MM-dd}"
    # 匹配到对应关键字,生成指定索引
      when.equals:
        fields:
          index: "client-info"
    - index: "client-error-%{+yyyy-MM-dd}"
      when.equals:
        fields:
          index: "client-error"
    - index: "file-info-%{+yyyy-MM-dd}"
      when.equals:
        fields:
          index: "file-info"
    - index: "file-error-%{+yyyy-MM-dd}"
      when.equals:
        fields:
          index: "file-error"
  # 账号和密码,使用默认的配置
  username: "elastic"
  password: "changeme"
  1. multiline.pattern: ‘^\d{4}’
  2. multiline.negate: true
  3. multiline.match: after

如果不加上述的配置,当日志格式如下:

2023-07-06 15:22:46.358 [http-nio-9091-exec-6] ERROR o.a.c.c.C.[.[.[/client].[dispatcherServlet] - Servlet.service() for servlet [dispatcherServlet] in context with path [/client] threw exception [Request processing failed; nested exception is java.lang.IllegalStateException: User Token Is Expires] with root cause
java.lang.IllegalStateException: User Token Is Expires
    at com.rhx.client.config.interceptor.LoginInterceptor.preHandle(LoginInterceptor.java:36)
    at org.springframework.web.servlet.HandlerExecutionChain.applyPreHandle(HandlerExecutionChain.java:148)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1062)

会被解析成一行一行的数据,这个显然不是我们想要的结果。

通过配置:multiline.pattern: ‘^\d{4}’(匹配4个数字年份开头的)来进行控制。使得这一批的数据作为一行解析展示。

后台启动

(nohup ./filebeat -e -c filebeat.yml >/dev/null 2>&1 &)
  1. 将所有标准输出及标准错误输出到 /dev/null 空设备,即没有任何输出。
  2. 停止服务,通过 ps -ef |grep filebeat 命令找到对应的进程,通过 kill -9 进行停止。

文章作者: L Q
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 L Q !
  目录