官网下载 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 链接

查看运行日志
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

创建索引模式



在这里就可以搜索日志了

