在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

创建索引模式



在这里就可以搜索日志了

相关推荐
王飞飞不会飞1 分钟前
Mac 安装Hermes Agent 过程记录
运维·深度学习·机器学习
你有医保你先上8 分钟前
Elasticsearch Go 客户端
后端·elasticsearch·go
徐子元竟然被占了!!23 分钟前
Nginx
运维·nginx
烛衔溟31 分钟前
TypeScript this 参数类型与全局 this
javascript·ubuntu·typescript
Elasticsearch1 小时前
你的 PromQL 查询现在可以在 Kibana 中运行了
elasticsearch
SPC的存折1 小时前
6、Docker常用配置
运维·docker·容器
QC·Rex2 小时前
Kubernetes 生产环境调试安全最佳实践:2026 年完整指南
安全·贪心算法·kubernetes
星谐2 小时前
AutoUploadLL:自动化上传工具开发实践
运维·自动化
NineData2 小时前
NineData将亮相2026德国汉诺威工业博览会
运维·数据库·后端
CXH7282 小时前
nginx——https
运维·nginx·https