在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

创建索引模式



在这里就可以搜索日志了

相关推荐
字节逆旅18 小时前
ubuntu应用深度守护
ubuntu
可观测性用观测云1 天前
云原生网关 Ingress-Nginx 链路追踪实战:OpenTelemetry 采集与观测云集成方案
nginx·kubernetes
洛森唛1 天前
ElasticSearch查询语句Query String详解:从入门到精通
后端·elasticsearch
甲鱼9291 天前
MySQL 实战手记:日志管理与主从复制搭建全指南
运维
洛森唛2 天前
Elasticsearch DSL 查询语法大全:从入门到精通
后端·elasticsearch
蝎子莱莱爱打怪3 天前
GitLab CI/CD + Docker Registry + K8s 部署完整实战指南
后端·docker·kubernetes
碳基沙盒3 天前
OpenClaw 多 Agent 配置实战指南
运维
Elasticsearch4 天前
如何使用 Agent Builder 排查 Kubernetes Pod 重启和 OOMKilled 事件
elasticsearch
Elasticsearch5 天前
通用表达式语言 ( CEL ): CEL 输入如何改进 Elastic Agent 集成中的数据收集
elasticsearch
蝎子莱莱爱打怪6 天前
Centos7中一键安装K8s集群以及Rancher安装记录
运维·后端·kubernetes