在ubuntu部署EFK测试功能使用

官网下载 elasticsearch 链接

https://www.elastic.co/downloads/past-releases?product=elasticsearch

官网搜索 elasticsearch 下载指定 版本

下载直接解压使用

右键复制下载链接

下载 elasticsearch

powershell 复制代码
mkdir -p /opt/efk
cd /opt/efk
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.10.2-linux-x86_64.tar.gz
tar xvf elasticsearch-7.10.2-linux-x86_64.tar.gz
mv elasticsearch-7.10.2 elasticsearch

添加 elasticsearch 用户

powershell 复制代码
sudo adduser --system --group --no-create-home elasticsearch
sudo chown -R elasticsearch:elasticsearch /opt/efk/elasticsearch

修改配置

powershell 复制代码
vim /opt/efk/elasticsearch/config/elasticsearch.yml
grep -v "^#" /opt/efk/elasticsearch/config/elasticsearch.yml

后台运行 elasticsearch

powershell 复制代码
# -d 后台运行
sudo -u elasticsearch /opt/efk/elasticsearch/bin/elasticsearch -d
# 执行这个命令退出
pkill -u elasticsearch -f elasticsearch

查看运行日志

powershell 复制代码
less /opt/efk/elasticsearch/logs/elasticsearch.log
powershell 复制代码
curl localhost:9200

看到下面的图就代表成功

kibana 下载

powershell 复制代码
cd /opt/efk
wget https://artifacts.elastic.co/downloads/kibana/kibana-7.10.2-linux-x86_64.tar.gz
tar xvf kibana-7.10.2-linux-x86_64.tar.gz
mv kibana-7.10.2-linux-x86_64 kibana

修改配置

powershell 复制代码
vim /opt/efk/kibana/config/kibana.yml
grep -Ev "^#|^$" /opt/efk/kibana/config/kibana.yml

后台运行 kibana

powershell 复制代码
nohup /opt/efk/kibana/bin/kibana --allow-root &
# 执行这个命令退出
pkill -f kibana 

打开 kibana 链接

http://127.0.0.1:5601

查看运行日志

powershell 复制代码
less /opt/efk/kibana/bin/nohup.out

filebeat 下载

powershell 复制代码
mkdir -p /opt/efk
cd /opt/efk
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.10.2-linux-x86_64.tar.gz
tar xvf filebeat-7.10.2-linux-x86_64.tar.gz
mv filebeat-7.10.2-linux-x86_64 filebeat
# 跟改默认的配置文件 自己写
mv /opt/efk/filebeat/filebeat.yml /opt/efk/filebeat/filebeat.ymlbak

添加 filebeat 配置文件 输出控制台

powershell 复制代码
vim /opt/efk/filebeat/filebeat.yml
powershell 复制代码
filebeat.inputs:
  - type: log
    paths:
      - /var/log/pods/*/*/*.log
    fields:
      log_type: kubernetes
    # 把 log_type 自定义的字段 直接放到日志 根级别
    fields_under_root: true

processors:
  - dissect:
      tokenizer: "/var/log/pods/%{namespace}_%{pod}_%{}/%{container}/%{}.log"
      field: "log.file.path"
      # 所有提取的字段加上 k8s. 前缀
      target_prefix: "k8s"

  # 使用 javascript 语言 解析 k8s.pod 获取 pod对应的 sts deploy ds 的名称
  - script:
      lang: javascript
      source: |
        function process(event) {
          var pod = event.Get("k8s.pod");
          if (!pod) return;

          var parts = pod.split('-');
          var last = parts[parts.length - 1];
          var secondLast = parts.length >= 2 ? parts[parts.length - 2] : "";

          // 规则判断
          if (/^\d+$/.test(last)) {
            // sts-test-0 → statefulset
            event.Put("k8s.statefulset.name", parts.slice(0, -1).join('-'));
          }
          else if (/^[a-f0-9]{8,10}$/.test(secondLast)) {
            // deploy-test-79d4d5bc64-9jfbx → deployment
            event.Put("k8s.deployment.name", parts.slice(0, -2).join('-'));
          }
          else if (/^[a-zA-Z0-9]{5}$/.test(last)) {
            // ds-test-dl9vm → daemonset
            event.Put("k8s.daemonset.name", parts.slice(0, -1).join('-'));
          }
        }

# 输出到控制台查看 调试使用
output.console:
  pretty: true

# ubuntu22.04安装filebeat报错 添加下面参数
seccomp:
  default_action: allow
  syscalls:
  - action: allow
    names:
    - rseq

前台运行filebeat

查看输出是否符合预期

powershell 复制代码
cd /opt/efk/filebeat
./filebeat -e -c filebeat.yml

修改filebeat配置 日志存es

收集系统日志和k8s pod日志

powershell 复制代码
# 日志输入路径
filebeat.inputs:
  # 系统日志收集
  - type: log
    enabled: true
    paths:
      - /var/log/syslog
    # 排除 .gz 结尾的
    exclude_files: ['\.gz$']
    fields:
      log_type: system
      log_file: syslog
    fields_under_root: true

  # k8s pod 日志收集
  - type: log
    paths:
      - /var/log/pods/*/*/*.log
    # 排除空行
    exclude_lines: ["^\\s+$"]  
    multiline:
      pattern: '^\d{4}-\d{2}-\d{2}'
      negate: true
      match: after
    # 单行日志 最大5M
    max_bytes: 5242880
    fields:
      log_type: kubernetes
    # 把 log_type 自定义的字段 直接放到日志 根级别
    fields_under_root: true

processors:
  - dissect:
      tokenizer: "/var/log/pods/%{namespace}_%{pod}_%{}/%{container}/%{}.log"
      field: "log.file.path"
      # 所有提取的字段加上 k8s. 前缀
      target_prefix: "k8s"
      # 当日志类型是 kubernetes 才进行这个解析
      when:
        contains:
          log_type: "kubernetes"

  # 使用 javascript 语言 解析 k8s.pod 获取 pod对应的 sts deploy ds 的名称
  - script:
      lang: javascript
      source: |
        function process(event) {
          var pod = event.Get("k8s.pod");
          if (!pod) return;

          var parts = pod.split('-');
          var last = parts[parts.length - 1];
          var secondLast = parts.length >= 2 ? parts[parts.length - 2] : "";

          // 规则判断
          if (/^\d+$/.test(last)) {
            // sts-test-0 → statefulset
            event.Put("k8s.statefulset.name", parts.slice(0, -1).join('-'));
          }
          else if (/^[a-f0-9]{8,10}$/.test(secondLast)) {
            // deploy-test-79d4d5bc64-9jfbx → deployment
            event.Put("k8s.deployment.name", parts.slice(0, -2).join('-'));
          }
          else if (/^[a-zA-Z0-9]{5}$/.test(last)) {
            // ds-test-dl9vm → daemonset
            event.Put("k8s.daemonset.name", parts.slice(0, -1).join('-'));
          }
        }
      when:
        contains:
          log_type: "kubernetes"

#  输出到 Elasticsearch
output.elasticsearch:
  hosts: ["http://10.0.3.100:9200"]
  indices:
    - index: "logs-system-%{+yyyy.MM.dd}"
      when.contains:
        log_type: "system"
    - index: "logs-%{[k8s.namespace]}-%{+yyyy.MM.dd}"
      when.contains:
        log_type: "kubernetes"

# ubuntu22.04安装filebeat报错 添加下面参数
seccomp:
  default_action: allow
  syscalls:
  - action: allow
    names:
    - rseq

后台运行filebeat

powershell 复制代码
cd /opt/efk/filebeat
nohup ./filebeat -e -c filebeat.yml &
# 执行这个命令退出
pkill -f filebeat
# 查看日志
less /opt/efk/filebeat/nohup.out

kibana 界面查看

我这是单节点 所以运行状态是 yellow

创建索引模式



在这里就可以搜索日志了

相关推荐
腾讯蓝鲸智云4 小时前
【运维自动化-节点管理】节点管理的插件策略如何使用
运维·自动化·云计算·sass·paas
疯狂成瘾者6 小时前
服务器的单体和集群
运维·服务器
liuhuizuikeai6 小时前
可视化门禁---Linux/Qt+SqLite篇
linux·运维·qt
charlie1145141919 小时前
嵌入式Linux驱动开发——新 API 字符设备驱动完整教程 - 从设备结构体到应用测试
linux·运维·驱动开发
gwjcloud10 小时前
Kubernetes从入门到精通(高级篇)04
云原生·容器·kubernetes
飞Link10 小时前
2000 亿砸向算力:字节跳动 AI 基建跨越,后端与运维的“万亿 Token”生死战
运维·人工智能
SWAGGY..10 小时前
Linux系统编程:(二)基础指令详解
linux·运维·服务器
烛衔溟11 小时前
TypeScript 接口继承与混合类型
linux·ubuntu·typescript
张文君11 小时前
上古世纪服务端编译安装AAEmu docker编译安装
运维·docker·容器
雾岛心情11 小时前
小铭邮件管理工具箱的界面(公司版)
运维·服务器·工具·o365·小铭邮件工具箱(公司版)