在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

创建索引模式



在这里就可以搜索日志了

相关推荐
流浪001几秒前
Linux系统篇34——信号(六):信号处理期间又来了怎么办?——sigaction、sa_mask、可重入函数与 volatile
linux·运维·面试·操作系统·信号处理·信号
学烹饪的小胡桃14 分钟前
资产设备管理系统 WGFIX 怎么设置https访问
linux·运维·服务器·网络·安全
志栋智能1 小时前
超自动化巡检如何生成“有灵魂”的运维报告?
大数据·运维·人工智能·架构·自动化
凌风的跨境分享1 小时前
Temu运营避坑指南:制造地点信息填写合规要点与批量优化方法
运维·服务器·人工智能
Splashtop高性能远程控制软件1 小时前
微软 2026 年 9 月补丁星期二技术分析:974 个漏洞的分级修复优先级清单
运维·安全·自动化·远程工作·splashtop
Elastic 中国社区官方博客2 小时前
将 Vercel 数据导入 Elastic:无需安装任何东西的无服务器可观测性
大数据·运维·elasticsearch·搜索引擎·云原生·serverless·全文检索
m0_634865402 小时前
2G2核服务器部署deep seekharness 困难?资源不够?DeepSeek Harness 部署复用笔记
运维·服务器·deepseek·harness
赵民勇2 小时前
systemd-sysusers命令详解
linux·运维
本人手速666+3 小时前
企业微信 API 接入层如何降低业务系统复杂度
运维·网络协议·微信·自动化·ipad
Elasticsearch3 小时前
我们如何将 PromQL 构建到 Elasticsearch 中
elasticsearch