02. ELK基础-安装

安装

注意,ELK部署是基于JDK的,但ELK部署过程中内置了OpenJDK,所以安装时要根据公司要求选择是否自定义JDK。

yum安装

以ELKF7.17.22为例

基础配置

  • 设置主机名称
#各个主机单独执行命令
hostnamectl set-hostname elk-node-01
hostnamectl set-hostname elk-node-02
hostnamectl set-hostname elk-node-03
  • 关闭防火墙
#所有节点都要执行(可以选择关闭防火墙,也可以选择添加防火墙策略)
systemctl stop firewalld
systemctl disable firewalld
  • 关闭selinux
#所有节点都要执行
setenforce 0
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
  • 配置yum源
#所有节点都要执行
wget -O /etc/yum.repos.d/Centos-7.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum clean all
yum makecache
  • 优化sshd服务
#所有节点都要执行
sed -ri 's/^#UseDNS yes/UseDNS no/g' /etc/ssh/sshd_config
sed -ri 's/^GSSAPIAuthentication yes/GSSAPIAuthentication no/g' /etc/ssh/sshd_config
  • 集群时间同步
#所有节点都要执行
yum -y install ntpdate chrony
sed -ri 's/^server/#server/g' /etc/chrony.conf
echo "server ntp.aliyun.com iburst" >> /etc/chrony.conf
systemctl start chronyd
systemctl enable chronyd

#显示chronyd服务正在使用的NTP源服务器的详细状态
chronyc sourcestats -v

Elasticsearch部署

注意:Elasticsearch需要配置监听地址才能对外提供访问。具体配置参考Elasticsearch配置详解。

  • 配置安装源
#配置Elasticsearch安装源
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

cat > /etc/yum.repos.d/elasticsearch.repo << EOF
[elasticsearch]
name=Elasticsearch repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=0
autorefresh=1
type=rpm-md
EOF
  • 安装ELasticsearch
yum search elasticsearch
yum -y install --enablerepo=elasticsearch elasticsearch
  • 管理Elasticsearch
#启动
systemctl start elasticsearch
#状态
systemctl status elasticsearch
#关闭
systemctl stop elasticsearch
#开机自启
systemctl enable elasticsearch
  • 查看端口
ss -ntl
  • 验证Elasticsearch
curl -iv 127.0.0.1:9200
curl -iv http://127.0.0.1:9200

Logstash部署

  • 配置安装源
#配置Logstash安装源
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

cat > /etc/yum.repos.d/logstash.repo << EOF
[logstash-7.x]
name=Elastic repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
EOF
  • 安装Logstash
yum search logstash
yum -y install logstash
  • 管理Logstash
#启动
systemctl start logstash
#状态
systemctl status logstash
#关闭
systemctl stop logstash
  • 命令管理
cat >> /etc/profile << EOF
export PATH=$PATH:/usr/share/logstash/bin
EOF

source /etc/profile
  • 查看端口
ss -ntl
  • 验证Logstash
#简单调整logstash.yml文件
cat > /etc/logstash/logstash-stdin-to-console.conf << EOF
input {
  stdin {}
}

output {
  stdout {}
}
EOF

#检查logstash.conf语法
logstash -tf /etc/logstash/logstash-stdin-to-console.conf

#验证logstash
logstash -f /etc/logstash/logstash-stdin-to-console.conf

# [INFO ] 2024-06-20 23:15:49.345 [Agent thread] agent - Pipelines running {:count=>1, :running_pipelines=>[:main], :non_running_pipelines=>[]}
# 1234567890     #输入信息
# {
#           "host" => "elk-node-03",
#     "@timestamp" => 2024-06-20T15:16:28.290Z,
#        "message" => "1234567890",
#       "@version" => "1"
# }

Kibana部署

注意:Kibana要正常启动,需要配置Kibana链接Elasticsearch。具体配置参考Kibana配置详解。

  • 配置安装源
#配置Kibana安装源
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

cat > /etc/yum.repos.d/kibana.repo << EOF
[kibana-7.x]
name=Kibana repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
EOF
  • 安装Kibana
yum search kibana
yum -y install kibana
  • 管理Kibana
#启动
systemctl start kibana
#状态
systemctl status kibana
#关闭
systemctl stop kibana
#开机自启
systemctl enable kibana
  • 查看端口
ss -ntl
  • 验证Kibana
curl -iv 127.0.0.1:5601

Filebeat部署

  • 配置安装源
rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch

cat > /etc/yum.repos.d/kibana.repo << EOF
[elastic-7.x]
name=Elastic repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
EOF
  • 安装Filebeat
yum search filebeat
yum -y install filebeat
  • 管理Filebeat
#启动
systemctl start filebeat
#状态
systemctl status filebeat
#关闭
systemctl stop filebeat
#开机自启
systemctl enable filebeat
  • 查看端口
ss -ntl
  • 验证Filebeat
#简单调整Filebeat.yml文件
cat > /etc/filebeat/filebeat-stdin-to-console.yml << EOF
filebeat.inputs:
- type: stdin

output.console:
  pretty: true
EOF

#注意:命令验证Filebeat时,需要关闭Filebeat服务
systemctl stop filebeat

#验证Filebeat
filebeat -e -c /etc/filebeat/filebeat-stdin-to-console.yml

# 2024-06-17T10:33:20.056+0800	INFO	[stdin.harvester]	log/harvester.go:310	Harvester started for paths: []	{"harvester_id": "08a5a8cb-f3b3-4232-9e15-65cc2a2a29bd"}
# 1234567890      #输入信息
# {
#   "@timestamp": "2024-06-17T02:33:28.126Z",
#   "@metadata": {
#     "beat": "filebeat",
#     "type": "_doc",
#     "version": "7.17.22"
#   },
#   "log": {
#     "file": {
#       "path": ""
#     },
#     "offset": 0
#   },
#   "message": "1234567890",					#信息输出
#   "input": {
#     "type": "stdin"
#   },
#   "ecs": {
#     "version": "1.12.0"
#   },
#   "host": {
#     "name": "elk-node-03"
#   },
#   "agent": {
#     "hostname": "elk-node-03",
#     "ephemeral_id": "17e7af42-0518-4328-8f04-29cdbeb4fbec",
#     "id": "0be50aa4-7a96-4594-8399-a19068a92534",
#     "name": "elk-node-03",
#     "type": "filebeat",
#     "version": "7.17.22"
#   }
# }

rpm包安装

基础配置

  • 设置主机名称
#各个主机单独执行命令
hostnamectl set-hostname elk-node-01
hostnamectl set-hostname elk-node-02
hostnamectl set-hostname elk-node-03
  • 关闭防火墙
#所有节点都要执行(可以选择关闭防火墙,也可以选择添加防火墙策略)
systemctl stop firewalld
systemctl disable firewalld
  • 关闭selinux
#所有节点都要执行
setenforce 0
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
  • 配置yum源
#所有节点都要执行
wget -O /etc/yum.repos.d/Centos-7.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum clean all
yum makecache
  • 优化sshd服务
#所有节点都要执行
sed -ri 's/^#UseDNS yes/UseDNS no/g' /etc/ssh/sshd_config
sed -ri 's/^GSSAPIAuthentication yes/GSSAPIAuthentication no/g' /etc/ssh/sshd_config
  • 集群时间同步
#所有节点都要执行
yum -y install ntpdate chrony
sed -ri 's/^server/#server/g' /etc/chrony.conf
echo "server ntp.aliyun.com iburst" >> /etc/chrony.conf
systemctl start chronyd
systemctl enable chronyd

#显示chronyd服务正在使用的NTP源服务器的详细状态
chronyc sourcestats -v

Elasticsearch部署

注意:Elasticsearch需要配置监听地址才能对外提供访问。具体配置参考Elasticsearch配置详解。

  • 下载rpm包
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.17.21-x86_64.rpm
  • 安装Elasticsearch
yum -y localinstall elasticsearch-7.17.21-x86_64.rpm
  • 管理Elasticsearch
#启动
systemctl start elasticsearch
#状态
systemctl status elasticsearch
#关闭
systemctl stop elasticsearch
#开机自启
systemctl enable elasticsearch
  • 查看端口
ss -ntl
  • 验证Elasticsearch
curl -iv 127.0.0.1:9200
curl -iv http://127.0.0.1:9200

Logstash部署

  • 下载rpm包
wget https://artifacts.elastic.co/downloads/logstash/logstash-7.17.22-x86_64.rpm
  • 安装Logstash
yum -y localinstall logstash-7.17.22-x86_64.rpm
  • 管理
#启动
systemctl start logstash
#状态
systemctl status logstash
#关闭
systemctl stop logstash
  • 命令管理
cat >> /etc/profile << EOF
export PATH=$PATH:/usr/share/logstash/bin
EOF

source /etc/profile
  • 查看端口
ss -ntl
  • 验证Logstash
#简单调整logstash.yml文件
cat > /etc/logstash/logstash-stdin-to-console.conf << EOF
input {
  stdin {}
}

output {
  stdout {}
}
EOF

#检查logstash.yml语法
logstash -tf /etc/logstash/logstash-stdin-to-console.conf

# Using bundled JDK: /usr/share/logstash/jdk
# OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.
# WARNING: Could not find logstash.yml which is typically located in $LS_HOME/config or /etc/logstash. You can specify the path using --path.settings. Continuing using the defaults
# Could not find log4j2 configuration at path /usr/share/logstash/config/log4j2.properties. Using default config which logs errors to the console
# [INFO ] 2024-06-20 23:19:09.919 [main] runner - Starting Logstash {"logstash.version"=>"7.17.22", "jruby.version"=>"jruby 9.2.20.1 (2.5.8) 2021-11-30 2a2962fbd1 OpenJDK 64-Bit Server VM 11.0.22+7 on 11.0.22+7 +indy +jit [linux-x86_64]"}
# [INFO ] 2024-06-20 23:19:09.927 [main] runner - JVM bootstrap flags: [-Xms1g, -Xmx1g, -XX:+UseConcMarkSweepGC, -XX:CMSInitiatingOccupancyFraction=75, -XX:+UseCMSInitiatingOccupancyOnly, -Djava.awt.headless=true, -Dfile.encoding=UTF-8, -Djdk.io.File.enableADS=true, -Djruby.compile.invokedynamic=true, -Djruby.jit.threshold=0, -Djruby.regexp.interruptible=true, -XX:+HeapDumpOnOutOfMemoryError, -Djava.security.egd=file:/dev/urandom, -Dlog4j2.isThreadContextMapInheritable=true]
# [WARN ] 2024-06-20 23:19:10.383 [LogStash::Runner] multilocal - Ignoring the 'pipelines.yml' file because modules or command line options are specified
# [INFO ] 2024-06-20 23:19:11.351 [LogStash::Runner] Reflections - Reflections took 98 ms to scan 1 urls, producing 119 keys and 419 values 
# [WARN ] 2024-06-20 23:19:12.141 [LogStash::Runner] line - Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
# [WARN ] 2024-06-20 23:19:12.171 [LogStash::Runner] stdin - Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
# Configuration OK         #配置文件检查OK
# [INFO ] 2024-06-20 23:19:12.356 [LogStash::Runner] runner - Using config.test_and_exit mode. Config Validation Result: OK. Exiting Logstash

#验证logstash
logstash -f /etc/logstash/logstash-stdin-to-console.conf

# [INFO ] 2024-06-20 23:15:49.345 [Agent thread] agent - Pipelines running {:count=>1, :running_pipelines=>[:main], :non_running_pipelines=>[]}
# 1234567890     #输入信息
# {
#           "host" => "elk-node-03",
#     "@timestamp" => 2024-06-20T15:16:28.290Z,
#        "message" => "1234567890",
#       "@version" => "1"
# }

Kibana部署

注意:Kibana要正常启动,需要配置Kibana链接Elasticsearch。具体配置参考Kibana配置详解。

  • 下载rpm包
wget https://artifacts.elastic.co/downloads/kibana/kibana-7.17.22-x86_64.rpm
  • 安装Kibana
yum -y localinstall kibana-7.17.22-x86_64.rpm
  • 管理Kibana
#启动
systemctl start kibana
#状态
systemctl status kibana
#关闭
systemctl stop kibana
#开机自启
systemctl enable kibana
  • 查看端口
ss -ntl
  • 验证Kibana
curl -iv 127.0.0.1:5601

Filebeat部署

  • 下载rpm包
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.17.22-x86_64.rpm
  • 安装Filebeat
yum -y localinstall filebeat-7.17.22-x86_64.rpm
  • 管理Filebeat
#启动
systemctl start filebeat
#状态
systemctl status filebeat
#关闭
systemctl stop filebeat
#开机自启
systemctl enable filebeat
  • 查看端口
ss -ntl
  • 验证Filebeat
#简单调整Filebeat.yml文件
cat > /etc/filebeat/filebeat-stdin-to-console.yml << EOF
filebeat.inputs:
- type: stdin

output.console:
  pretty: true
EOF

#注意:命令验证Filebeat时,需要关闭Filebeat服务
systemctl stop filebeat

#验证Filebeat
filebeat -e -c /etc/filebeat/filebeat-stdin-to-console.yml

# 2024-06-17T10:33:20.056+0800	INFO	[stdin.harvester]	log/harvester.go:310	Harvester started for paths: []	{"harvester_id": "08a5a8cb-f3b3-4232-9e15-65cc2a2a29bd"}
# 1234567890      #输入信息
# {
#   "@timestamp": "2024-06-17T02:33:28.126Z",
#   "@metadata": {
#     "beat": "filebeat",
#     "type": "_doc",
#     "version": "7.17.22"
#   },
#   "log": {
#     "file": {
#       "path": ""
#     },
#     "offset": 0
#   },
#   "message": "1234567890",					#信息输出
#   "input": {
#     "type": "stdin"
#   },
#   "ecs": {
#     "version": "1.12.0"
#   },
#   "host": {
#     "name": "elk-node-03"
#   },
#   "agent": {
#     "hostname": "elk-node-03",
#     "ephemeral_id": "17e7af42-0518-4328-8f04-29cdbeb4fbec",
#     "id": "0be50aa4-7a96-4594-8399-a19068a92534",
#     "name": "elk-node-03",
#     "type": "filebeat",
#     "version": "7.17.22"
#   }
# }

二进制安装

基础配置

  • 设置主机名称
#各个主机单独执行命令
hostnamectl set-hostname elk-node-01
hostnamectl set-hostname elk-node-02
hostnamectl set-hostname elk-node-03
  • 关闭防火墙
#所有节点都要执行(可以选择关闭防火墙,也可以选择添加防火墙策略)
systemctl stop firewalld
systemctl disable firewalld
  • 关闭selinux
#所有节点都要执行
setenforce 0
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
  • 配置yum源
#所有节点都要执行
wget -O /etc/yum.repos.d/Centos-7.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum clean all
yum makecache
  • 优化sshd服务
#所有节点都要执行
sed -ri 's/^#UseDNS yes/UseDNS no/g' /etc/ssh/sshd_config
sed -ri 's/^GSSAPIAuthentication yes/GSSAPIAuthentication no/g' /etc/ssh/sshd_config
  • 集群时间同步
#所有节点都要执行
yum -y install ntpdate chrony
sed -ri 's/^server/#server/g' /etc/chrony.conf
echo "server ntp.aliyun.com iburst" >> /etc/chrony.conf
systemctl start chronyd
systemctl enable chronyd

#显示chronyd服务正在使用的NTP源服务器的详细状态
chronyc sourcestats -v

Elasticsearch部署

  • 下载安装包
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.17.22-linux-x86_64.tar.gz
  • 安装Elasticsearch
useradd elasticstack
tar -zxvf elasticsearch-7.17.22-linux-x86_64.tar.gz -C /usr/local/
mkdir -p /usr/local/elasticsearch-7.17.22/{data,logs}
chown -R elasticstack:elasticstack /usr/local/elasticsearch-7.17.22/
  • 管理Elasticsearch
su - elasticstack

#启动Elasticsearch
nohup /usr/local/elasticsearch-7.17.22/bin/elasticsearch &

#关闭Elasticsearch
ELASTICSEARCH_PID=$(ps -ef | grep elasticsearch | grep java | awk -F ' ' '{print $2}')
kill -9 $ELASTICSEARCH_PID
  • 查看端口
ss -ntl
  • 验证Elasticsearch
curl -iv 127.0.0.1:9200
curl -iv http://127.0.0.1:9200

Logstash部署

  • 下载安装包
wget https://artifacts.elastic.co/downloads/logstash/logstash-7.17.22-linux-x86_64.tar.gz
  • 安装Logstash
useradd elasticstack
tar -zxvf logstash-7.17.22-linux-x86_64.tar.gz -C /usr/local/
chown -R elasticstack:elasticstack /usr/local/logstash-7.17.22/
  • 管理Logstash
su - elasticstack

#启动Logstash
#nohup /usr/local/logstash-7.17.22/bin/logstash & (注意:此方法启动时需要配置Logstash配置文件)
nohup /usr/local/logstash-7.17.22/bin/logstash -f /usr/local/logstash-7.17.22/config/logstash-sample.conf &

#关闭Logstash
LOGSTASH_PID=$(ps -ef | grep logstash | grep java | awk -F ' ' '{print $2}')
kill -9 $LOGSTASH_PID
  • 查看端口
ss -ntl
  • 验证Logstash
#简单调整logstash.yml文件
cat > /etc/logstash/logstash-stdin-to-console.conf << EOF
input {
  stdin {}
}

output {
  stdout {}
}
EOF

#检查logstash.yml语法
logstash -tf /etc/logstash/logstash-stdin-to-console.conf

# Using bundled JDK: /usr/share/logstash/jdk
# OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.
# WARNING: Could not find logstash.yml which is typically located in $LS_HOME/config or /etc/logstash. You can specify the path using --path.settings. Continuing using the defaults
# Could not find log4j2 configuration at path /usr/share/logstash/config/log4j2.properties. Using default config which logs errors to the console
# [INFO ] 2024-06-20 23:19:09.919 [main] runner - Starting Logstash {"logstash.version"=>"7.17.22", "jruby.version"=>"jruby 9.2.20.1 (2.5.8) 2021-11-30 2a2962fbd1 OpenJDK 64-Bit Server VM 11.0.22+7 on 11.0.22+7 +indy +jit [linux-x86_64]"}
# [INFO ] 2024-06-20 23:19:09.927 [main] runner - JVM bootstrap flags: [-Xms1g, -Xmx1g, -XX:+UseConcMarkSweepGC, -XX:CMSInitiatingOccupancyFraction=75, -XX:+UseCMSInitiatingOccupancyOnly, -Djava.awt.headless=true, -Dfile.encoding=UTF-8, -Djdk.io.File.enableADS=true, -Djruby.compile.invokedynamic=true, -Djruby.jit.threshold=0, -Djruby.regexp.interruptible=true, -XX:+HeapDumpOnOutOfMemoryError, -Djava.security.egd=file:/dev/urandom, -Dlog4j2.isThreadContextMapInheritable=true]
# [WARN ] 2024-06-20 23:19:10.383 [LogStash::Runner] multilocal - Ignoring the 'pipelines.yml' file because modules or command line options are specified
# [INFO ] 2024-06-20 23:19:11.351 [LogStash::Runner] Reflections - Reflections took 98 ms to scan 1 urls, producing 119 keys and 419 values 
# [WARN ] 2024-06-20 23:19:12.141 [LogStash::Runner] line - Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
# [WARN ] 2024-06-20 23:19:12.171 [LogStash::Runner] stdin - Relying on default value of `pipeline.ecs_compatibility`, which may change in a future major release of Logstash. To avoid unexpected changes when upgrading Logstash, please explicitly declare your desired ECS Compatibility mode.
# Configuration OK         #配置文件检查OK
# [INFO ] 2024-06-20 23:19:12.356 [LogStash::Runner] runner - Using config.test_and_exit mode. Config Validation Result: OK. Exiting Logstash

#验证logstash
logstash -f /etc/logstash/logstash-stdin-to-console.conf

# [INFO ] 2024-06-20 23:15:49.345 [Agent thread] agent - Pipelines running {:count=>1, :running_pipelines=>[:main], :non_running_pipelines=>[]}
# 1234567890     #输入信息
# {
#           "host" => "elk-node-03",
#     "@timestamp" => 2024-06-20T15:16:28.290Z,
#        "message" => "1234567890",
#       "@version" => "1"
# }

Kibana部署

  • 下载安装包
wget https://artifacts.elastic.co/downloads/kibana/kibana-7.17.22-linux-x86_64.tar.gz
  • 安装Kibana
useradd elasticstack
tar -zxvf kibana-7.17.22-linux-x86_64.tar.gz -C /usr/local/
chown -R elasticstack:elasticstack /usr/local/kibana-7.17.22-linux-x86_64/
  • 管理Kibana
su - elasticstack

#启动Kibana(注意:启动Kibana时需要配置好Elasticsearch)
nohup /usr/local/kibana-7.17.22-linux-x86_64/bin/kibana &

#关闭Kibana
KIBANA_PID=$(ps -ef | grep kibana | grep java | awk -F ' ' '{print $2}')
kill -9 $KIBANA_PID
  • 查看端口
ss -ntl
  • 验证Kibana
curl -iv 127.0.0.1:5601

Filebeat部署

  • 下载安装包
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.17.22-linux-x86_64.tar.gz
  • 安装Filebeat
useradd elasticstack
tar -zxvf filebeat-7.17.22-linux-x86_64.tar.gz -C /usr/local/
chown -R elasticstack:elasticstack /usr/local/filebeat-7.17.22-linux-x86_64/
  • 管理Filebeat
su - elasticstack

#启动Filebeat
#nohup /usr/local/filebeat-7.17.22-linux-x86_64/filebeat & (注意:此方法启动时需要配置Filebeat配置文件)
nohup /usr/local/filebeat-7.17.22-linux-x86_64/filebeat -e -c /usr/local/filebeat-7.17.22-linux-x86_64/filebeat.yml &

#关闭Kibana
FILEBEAT_PID=$(ps -ef | grep filebeat | grep java | awk -F ' ' '{print $2}')
kill -9 $FILEBEAT_PID
  • 查看端口
ss -ntl
  • 验证Filebeat
#简单调整Filebeat.yml文件
cat > /etc/filebeat/filebeat-stdin-to-console.yml << EOF
filebeat.inputs:
- type: stdin

output.console:
  pretty: true
EOF

#注意:命令验证Filebeat时,需要关闭Filebeat服务
systemctl stop filebeat

#验证Filebeat
filebeat -e -c /etc/filebeat/filebeat-stdin-to-console.yml

# 2024-06-17T10:33:20.056+0800	INFO	[stdin.harvester]	log/harvester.go:310	Harvester started for paths: []	{"harvester_id": "08a5a8cb-f3b3-4232-9e15-65cc2a2a29bd"}
# 1234567890      #输入信息
# {
#   "@timestamp": "2024-06-17T02:33:28.126Z",
#   "@metadata": {
#     "beat": "filebeat",
#     "type": "_doc",
#     "version": "7.17.22"
#   },
#   "log": {
#     "file": {
#       "path": ""
#     },
#     "offset": 0
#   },
#   "message": "1234567890",					#信息输出
#   "input": {
#     "type": "stdin"
#   },
#   "ecs": {
#     "version": "1.12.0"
#   },
#   "host": {
#     "name": "elk-node-03"
#   },
#   "agent": {
#     "hostname": "elk-node-03",
#     "ephemeral_id": "17e7af42-0518-4328-8f04-29cdbeb4fbec",
#     "id": "0be50aa4-7a96-4594-8399-a19068a92534",
#     "name": "elk-node-03",
#     "type": "filebeat",
#     "version": "7.17.22"
#   }
# }

docker安装

下载镜像

  • 下载Elasticsearch镜像
docker pull docker.elastic.co/elasticsearch/elasticsearch:7.17.22
  • 下载Logstash镜像
docker pull docker.elastic.co/logstash/logstash:7.17.22
  • 下载Kibana镜像
docker pull docker.elastic.co/kibana/kibana:7.17.22
  • 下线Filebeat镜像
docker pull docker.elastic.co/beats/filebeat:7.17.22

部署ELKF

  • 创建目录
mkdir -p /data/{elasticsearch,logstash,kibana,filebeat}
chmod -R 777 /data/{elasticsearch,logstash,kibana,filebeat}
  • 创建网络
docker network create --subnet=172.20.0.0/16 elkf-net
  • 部署Elasticsearch
docker run -d --name elasticsearch \
--net elkf-net \
-p 9200:9200 -p 9300:9300 \
--restart=always \
-v /data/elasticsearch/data:/usr/share/elasticsearch/data \
-v /data/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
-v /data/elasticsearch/logs:/usr/share/elasticsearch/logs \
#自定义配置文件时使用
#-v /data/elasticsearch/config:/usr/share/elasticsearch/config \
-e "discovery.type=single-node" \
-e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
docker.elastic.co/elasticsearch/elasticsearch:7.17.22
  • 部署Logstash
docker run -d --name logstash \
--net elkf-net \
-p 5000:5000 -p 9600:9600 -p 5044:5044 \
--restart=always \
-v /data/logstash/data:/usr/share/logstash/data \
#自定义配置文件时使用
#-v /data/logstash/config:/usr/share/logstash/config \
docker.elastic.co/logstash/logstash:7.17.22
  • 部署Kibana
docker run -d --name kibana \
--net elkf-net \
-p 5601:5601 \
--restart=always \
-v /data/kibana/data:/usr/share/kibana/data \
#自定义配置文件时使用
#-v /data/kibana/config:/usr/share/kibana/config \
docker.elastic.co/kibana/kibana:7.17.22
  • 部署Filebeat
docker run -d --name filebeat \
--net elkf-net \
--privileged=true \
--user=root \
--restart=always \
-v /data/filebeat/data:/usr/share/filebeat/data \
-v /data/filebeat/logs:/opt/docker/logs \
#自定义模块文件时使用
#-v /data/filebeat/modules.d:/usr/share/filebeat/modules.d \
#自定义配置文件时使用
#-v /data/filebeat/config/filebeat.yml:/usr/share/filebeat/filebeat.yml \
docker.elastic.co/beats/filebeat:7.17.22

配置

Elasticsearch

配置文件路径

  • rpm包/yum安装
    | 文件路径 | 用途 |
    | — | — |
    | /var/log/elasticsearch/ | 日志文件路径 |
    | ./elasticsearch.log | Elasticsearch日志文件 |
    | ./elasticsearch_index_search_slowlog.log | Elasticsearch慢搜索日志文件 |
    | /var/lib/elasticsearch/ | 数据文件路径 |
    | ./nodes | 节点数据路径 |
    | /etc/elasticsearch/ | 配置文件路径 |
    | ./elasticsearch.yml | Elasticsearch配置文件 |
    | ./jvm.options | jvm配置文件 |
    | /usr/share/elasticsearch/ | Elasticsearch安装路径 |

默认配置文件

  • elasticsearch.yml

elasticsearch.yml

  • jvm.options

jvm.options.txt

配置文件详解

  • elasticsearch.yml
#集群的名称,确保所有节点都设置为相同的集群名称
cluster.name: my-application
#节点的名称,每个节点应该有一个唯一的名称
node.name: node-1
#Elasticsearch 数据文件的路径
path.data: /var/lib/elasticsearch
#Elasticsearch 日志文件的路径
path.logs: /var/log/elasticsearch
#是否锁定内存,避免内存交换
bootstrap.memory_lock: true
#Elasticsearch 监听的网络地址
network.host: 192.168.0.1
#Elasticsearch HTTP服务的端口
http.port: 9200
#集群中其他节点的地址列表
discovery.seed_hosts: ["host1", "host2"]
#初始主节点的列表,用于第一次启动时的集群选举
cluster.initial_master_nodes: ["node-1", "node-2"]
#是否需要显式指定索引名称来进行破坏性操作
action.destructive_requires_name: true

常用配置参数

  • 集群和节点设置:
    • cluster.name: 集群的名称,确保所有节点都设置为相同的集群名称。
    • node.name: 节点的名称,每个节点应该有一个唯一的名称。
    • node.master: 指示此节点是否可以作为主节点。
    • node.data: 指示此节点是否可以作为数据节点。
    • node.ingest: 指示此节点是否可以作为摄取节点。
  • 网络配置:
    • network.host: Elasticsearch 监听的网络地址。
    • http.port: Elasticsearch HTTP服务的端口。
    • transport.port: Elasticsearch 内部传输服务的端口。
  • 路径配置:
    • path.data: Elasticsearch 数据文件的路径。
    • path.logs: Elasticsearch 日志文件的路径。
  • 内存和线程池设置:
    • bootstrap.memory_lock: 是否锁定内存,避免内存交换。
    • bootstrap.system_call_filter: 是否启用系统调用过滤器。
    • thread_pool.search.size: 搜索线程池的大小。
    • thread_pool.index.size: 索引线程池的大小。
  • 集群发现和选举设置:
    • discovery.seed_hosts: 集群中其他节点的地址列表。
    • cluster.initial_master_nodes: 初始主节点的列表,用于第一次启动时的集群选举。
  • Gateway 设置:
    • gateway.recover_after_nodes: 在恢复集群状态之前需要连接的最少节点数。
    • gateway.expected_nodes: 集群中预期的节点数。
  • 其他设置:
    • action.destructive_requires_name: 是否需要显式指定索引名称来进行破坏性操作。
    • xpack.security.enabled: 是否启用 X-Pack 安全功能。

Logstash

配置文件路径

  • rpm包/yum安装
    | 文件路径 | 用途 |
    | — | — |
    | /etc/logstash/ | Logstash配置文件路径 |
    | ./logstash.yml | Logstash主配置文件 |
    | ./logstash-sample.conf | Logstash采集配置文件 |
    | ./jvm.options | jvm配置文件 |
    | ./pipelines.yml | 单个Logstash实例中运行多个管道的框架和说明 |
    | /usr/share/logstash | Logstash安装路径 |
    | ./data/plugins/inputs/file | Logstash数据临时存放路径 |
    | ./startup.options |
    |
    | /var/log/logstash/ | Logstash日志文件路径 |
    | /var/lib/logstash/ | Logstash数据存放路径 |

默认配置文件

  • logstash.yml

logstash.yml

  • pipelines.yml

pipelines.yml

  • logstash-sample.conf

logstash-sample.conf.txt

  • jvm.options

jvm.options.txt

配置文件详解

  • logstash.yml
#设置节点名称,一般使用主机名
node.name: elk-node-01
#logstash存储插件等数据目录
path.data: /var/lib/logstash
#主Pipeline名称
pipeline.id: main
#输出通道的工作workers数据量,默认cpu核心数
pipeline.workers: 2
#每个输出插件进程数量
pipeline.output.workers: 1
#单个工作线程在尝试执行其过滤器和输出之前将从输入收集的最大事件数量,默认125
pipeline.batch.size: 125
#此值为true时,即使内存中仍然有运行中事件,也会强制Logstash在关机期间退出
pipeline.unsafe_shutdown: false
#分发延迟时间
pipeline.batch.delay: 50
#从哪里获取主管道的管道配置
path.config: /etc/logstash/conf.d
#用于主管道的管道配置的字符串
config.string:
#当设置为true时,检查配置是否有效,然后退出,不检查grok模式正确性
config.test_and_exit: false
#当设置为true时,定期检查配置是否更改,并在更改时重新加载配置
config.reload.automatic: false
#定期检查时间间隔,单位s
config.reload.interval: 3s
#设置为true显示调试信息
config.debug: false
#队列类型,可设置为内存memory或者持久化persisted
queue.type: memory
#队列存储路径;如果队列类型为persisted,则生效
path.queue: /etc/logstash/data/queue
#队列为持久化,单个队列大小
queue.page_capacity: 64mb
#当启用持久化队列时,队列中未读事件的最大数量,0为不限制
queue.max_events: 0
#队列最大容量
queue.max_bytes: 1024mb
#在启用持久队列时强制执行检查点的最大数量,0为不限制
queue.checkpoint.acks: 1024
#在启用持久队列时强制执行检查点之前的最大数量的写入事件,0为不限制
queue.checkpoint.writes: 1024
#当启用持久队列时,在头页面上强制一个检查点的时间间隔
queue.checkpoint.interval: 1000
#Logstash监听地址
http.host: "0.0.0.0"
#Logstash监听端口
http.port: 9600
#Logstash日志收集级别
log.level: info
#Logstash日志存放路径
path.logs: /var/log/logstash
#插件路径
path.plugins: []
  • logstash-sample.conf
#定义Logstash数据接收模块
input {
  #定义接收模块为beat
  beats {
    #定义接收模块的端口,Filebeat默认端口为5044,所以此处使用的Filebeat
    port => 5044
  }
}

#定义Logstash数据输出模块
output {
  #定义输出到Elasticsearch
  elasticsearch {
    #Elasticsearch的地址和端口
    hosts => ["http://localhost:9200"]
    #Elasticsearch的索引
    index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
    #Elasticsearch的用户名
    #user => "elastic"
    #Elasticsearch的密码
    #password => "changeme"
  }
}

应用案例解释

  • 收集本地文件
input {
  #指定收集的类型为文件
  file {
    #指定文件的路径
    path => ["/tmp/files/*"]
    #指定文件读取位置,仅在sincdb*文件中没有记录情况下生效
    start_position => "beginning"
    #指定文件读取位置,默认读取最新数据,老数据不读取
    # start_position => "end"
  }
}

output {
  #指定数据输出到屏幕
  stdout {}
}
  • 收集TCP协议数据
input {
  tcp {
    port => 8888
  }
}

output {
  stdout {}
}
#TCP协议发送数据
telnet 192.168.108.128 8888

  • 日志聚合
input {
  file {
    path => ["/usr/local/nginx/logs/access.log*"]
  }
  
  file {
    path => ["/usr/local/nginx/logs/error.log*"]
  }
}

output {
  stdout {}
}
  • 收集HTTP协议数据
input {
  http {
    port => 8888
  }

  http {
    port => 9999
  }
}

output {
  stdout {}
}
#HTTP协议发送数据
curl -iv 192.168.108.128:8888

  • 输出对接
input {
  file {
    path => ["/tmp/files/*"]
  }
}

output {
  #对接Redis
  redis {
    #指定Reids地址
    host => 192.168.108.128
    #指定Redis端口
    port => 6379
    #指定Redis密码
    password => "Whaty@123"
    #指定Redis数据库编号
    db => 1
    #指定写入Redis数据的key类型
    data_type => "list"
    #指定Redis的key名
    key => "app-files"
  }

  #对接本地文件
  file {
    #指定本地文件路径
    path => "/data/logs/files/files.bak"
  }
  #对接Elasticsearch
  elasticsearch {
    #指定Elasticsearch地址和端口
    hosts => ["http://192.168.108.128:9200"]
    #自定义Elasticsearch的索引名称
    index => "app-files-%{+YYYY.MM.dd}"
    #Elasticsearch的用户名
    #user => "elastic"
    #Elasticsearch的密码
    #password => "changeme"
  }
}
  • 输入对接
input {
  #对接Redis(注意,从Redis中取出数据后会被删除源Redis数据)
  redis {
    #指定读取Redis数据的key类型
    data_type => "list"
    #指定Redis数据库编号,默认0号数据库
    db => 1
    #指定Redis数据库地址
    host => 192.168.108.128
    #指定Redis数据库端口
    port => 6379
    #指定Redis数据库密码
    password => "Whaty@123"
    #指定取数据的key名称
    key => "app-logs"
  }
  
  #对接Filebeat
  beats {
    #指定Filebeat端口,注意Logstash启动此项配置时,Filebeat需要将数据输出到Logstash。
    port => 5044
  }
}

output {
  stdout {}
}

常用配置参数

  • input
    • type:定义输入类型,如:file、stdin、beats等
    • path:定义文件输入的路径,指定要监听的文件
    • exclude:排除不需要监听的文件
  • filter
    • grok:用于解析和结构化文本数据
    • mutate:用于修改事件字段
    • date:用于解析和转换日期字段
    • geoip:用于添加地理信息
  • output
    • elasticsearch:输出数据到elasticsearch
    • stdout:输出到屏幕,用于测试
    • file:输出到文件

输出格式解析

  • 输出内容
{
          "host" => "localhost.localdomain",
      "@version" => "1",
       "message" => "1234567890",
    "@timestamp" => 2024-06-21T01:30:22.836Z
}
  • 输出解释
  1. host:标识接收到哪个主机的数据
  2. @version:接收数据的版本
  3. message:接收数据的具体内容
  4. @timestamp:接收数据的具体时间

常用插件-grok插件

  • 概述

grok插件基于正则匹配任意文本格式病对其进行结构化。
grok插件内置了120中匹配模式,也可以自定义匹配模式。
grok插件内置匹配模式参考:https://github.com/logstash-plugins/logstash-patterns-core/tree/master/patterns
grok插件更适合于因行而异的数据处理。

  • grok参数详解
  1. match:
    • match 参数是必须的,它指定了要解析的日志字段和匹配的模式。模式可以是一个预定义的模式,也可以是用户自定义的模式。
    • 例如,match => { “message” => “^%{NUMBER:id} %{NUMBER:value}” } 表示匹配 message 字段,并使用 NUMBER 模式来提取数字字段 id 和 value。
  2. patterns_dir:
    • patterns_dir 参数指定了 Grok 模式文件(pattern files)的路径。这些模式文件包含了预定义的模式,用于匹配和提取数据。
    • 例如,patterns_dir => [“/path/to/patterns”] 表示使用位于 /path/to/patterns 目录中的模式文件。
  3. patterns_files:
    • patterns_files 参数指定了要使用的模式文件的名称。这些文件包含了预定义的模式,用于匹配和提取数据。
    • 例如,patterns_files => [“my_patterns.grok”] 表示使用位于 Logstash 配置文件所在目录下的 my_patterns.grok 文件。
  4. named_captures:
    • named_captures 参数指定了是否应该为匹配到的每个模式创建一个字段。
    • 例如,named_captures => true 表示为匹配到的每个模式创建一个字段。
  5. overwrite:
    • overwrite 参数指定了是否应该覆盖现有的字段。
    • 例如,overwrite => true 表示覆盖现有的字段。
  6. multiline:
    • multiline 参数指定了是否应该将多条日志行合并为一个事件。
    • 例如,multiline => true 表示将多条日志行合并为一个事件。
  7. overwrite_keys:
    • overwrite_keys 参数指定了是否应该覆盖现有的键。
    • 例如,overwrite_keys => true 表示覆盖现有的键。
  8. tag_on_failure:
    • tag_on_failure 参数指定了在匹配失败时应该给事件添加的标签。
    • 例如,tag_on_failure => “grok_failure” 表示在匹配失败时给事件添加标签 grok_failure。
  9. timezone:
    • timezone 参数指定了时区。
    • 例如,timezone => “UTC” 表示使用 UTC 时区。
  10. add_tag:
  • add_tag 参数指定了在匹配成功时应该给事件添加的标签。
  • 例如,add_tag => “grok_success” 表示在匹配成功时给事件添加标签 grok_success。
  • 内置匹配模式解析
  1. 格式
%{SYNTAX:SEMANTIC}
%{匹配文本模式名称:匹配的文本标识符}

#匹配的文本标识符,可以自定义
  1. 举例
#访问日志举例
192.168.23.100 "GET / HTTP/1.1" 12121 0.043

#grok匹配模式
filter {
  grok {
    message => "%{IP:my-client} %{WORD:my-method} %{URIPATHPARAM:my-request} %{NUMBER:my-bytes} %{NUMBER:my-duration}"
  }
}

#解释匹配
my-client:192.168.23.100
my-method:GET
my-request:/
my-bytes:12121
my-duration:0.043
  • 自定义匹配模式解析
  1. 格式
(?<field_name>the pattern here)
(?<自定义匹配标识符>匹配规则)

#
  1. 举例
#访问日志举例
cat > /root/test.txt << EOF
Jan  1 06:25:43 mailserver14 postfix/cleanup[21403]: BEF25A72965: message-id=<20130101142543.5828399CCAF@mailserver14.example.com>
EOF

#grok匹配模式
filter {
  grok {
    #指定匹配内容的目录,可以使用绝对路径和相对路径
    patterns_dir => ["/root/test.txt"]
    match => { "message" => "%{SYSLOGBASE} %{POSTFIX_QUEUEID:queue_id}: %{GREEDYDATA:syslog_message}" }
  }
}

#解释匹配
timestamp: Jan  1 06:25:43
logsource: mailserver14
program: postfix/cleanup
pid: 21403
queue_id: BEF25A72965
syslog_message: message-id=<20130101142543.5828399CCAF@mailserver14.example.com>

常用插件-字段添加移除(filter通用插件)

主要用于添加或删除字段,使得输出更新明确简洁。

  • remove_field
#grok匹配模式
filter {
  grok {
    #指定匹配内容的目录,可以使用绝对路径和相对路径
    patterns_dir => ["/root/test.txt"]
    match => { "message" => "%{SYSLOGBASE} %{POSTFIX_QUEUEID:queue_id}: %{GREEDYDATA:syslog_message}" }

    #移除字段(移除单个字段)
    remove_field => ["@version"]
    #移除字段(移除多个字段)
    #remove_field => ["@version", "agent", "input", "log"]
  }
}
  • add_field
#grok匹配模式
filter {
  grok {
    #指定匹配内容的目录,可以使用绝对路径和相对路径
    patterns_dir => ["/root/test.txt"]
    match => { "message" => "%{SYSLOGBASE} %{POSTFIX_QUEUEID:queue_id}: %{GREEDYDATA:syslog_message}" }

    #添加字段(添加单个字段)
    add_field => {"my-hostname" => "HOSTNAME --> %{hostname}"}
    #添加字段(添加多个字段)
    #add_field => {
    #"my-hostname" => "HOSTNAME --> %{hostname}"
    #"my-hostIP" => "HOSTIP --> 192.168.23.128"
    #}
  }
}

#注意
#hostname引用的是已有字段,使其作为新添加字段的变量

常用插件-标签添加移除(filter通用插件)

  • remove_tag
#grok匹配模式
filter {
  grok {
    #指定匹配内容的目录,可以使用绝对路径和相对路径
    patterns_dir => ["/root/test.txt"]
    match => { "message" => "%{SYSLOGBASE} %{POSTFIX_QUEUEID:queue_id}: %{GREEDYDATA:syslog_message}" }

    #移除标签
    remove_tag => ["province"]
    #移除标签(移除多个标签)
    #remove_tag => ["province", "position"]
  }
}
  • add_tag
#grok匹配模式
filter {
  grok {
    #指定匹配内容的目录,可以使用绝对路径和相对路径
    patterns_dir => ["/root/test.txt"]
    match => { "message" => "%{SYSLOGBASE} %{POSTFIX_QUEUEID:queue_id}: %{GREEDYDATA:syslog_message}" }

    #添加标签
    remove_tag => ["province"]
    #添加标签(添加多个标签)
    #remove_tag => ["province", "position"]
  }
}

Kibana

配置文件路径

  • rpm包/yum安装
    | 文件路径 | 用途 |
    | — | — |
    | /var/log/kibana/ | 日志文件路径 |
    | ./kibana.log | Kibana日志文件 |
    | /var/lib/kibana/ | 数据文件路径 |
    | /etc/kibana/ | 配置文件路径 |
    | ./kibana.yml | Kibana配置文件 |
    | ./node.options |
    |
    | /usr/share/kibana/ | Kibana安装路径 |

默认配置文件

  • kibana.yml

kibana.yml

  • node.options

node.options.txt

配置文件详解

  • kibana.yml
#Kibana 服务的监听端口
server.port: 5601
#Kibana 服务的绑定地址。
server.host: "localhost"
#Kibana 服务的基础路径
server.basePath: ""
#默认值 : 1048576 传入服务器请求的最大有效负载大小(以字节为单位)。
server.maxPayload: 1048576
#默认值 : “your-hostname” 用于标识此 Kibana 实例的可读的显示名称。
server.name: "your-hostname"
#连接Elasticsearch的地址和端口
elasticsearch.hosts: ["http://localhost:9200"]
#Kibana用来存储仪表板和配置的索引名称
kibana.index: ".kibana"
#连接Elasticsearch的用户
elasticsearch.username: "kibana_system"
#连接Elasticsearch的密码
elasticsearch.password: "pass"
#Kibana的pid文件路径
pid.file: /run/kibana/kibana.pid
#Kibana语言设置
i18n.locale: "en"

常用配置参数

  • 服务器设置:
    • server.port: Kibana 服务的监听端口。
    • server.host: Kibana 服务的绑定地址。
    • server.basePath: Kibana 的基础路径,用于部署在代理后面时重写路径。
    • server.rewriteBasePath: 是否重写 server.basePath。
    • server.ssl.enabled: 是否启用 SSL/TLS。
    • server.ssl.certificate 和 server.ssl.key: SSL 证书和私钥的路径。
  • Elasticsearch 设置:
    • elasticsearch.hosts: Elasticsearch 实例的地址列表。
    • elasticsearch.username 和 elasticsearch.password: 用于 Elasticsearch 基本认证的凭据。
    • elasticsearch.ssl.certificateAuthorities: Elasticsearch 证书权威机构的证书路径。
    • elasticsearch.pingTimeout: Elasticsearch ping 操作的超时时间。
    • elasticsearch.requestTimeout: Elasticsearch 请求的超时时间。
  • Kibana 设置:
    • kibana.index: Kibana 用来存储仪表板和配置的索引名称。
    • kibana.defaultAppId: Kibana 启动后默认打开的应用 ID。
    • kibana.timezone: Kibana 使用的时区。
    • kibana.uiSettings: Kibana 的 UI 设置,可以覆盖默认的索引模式等。
  • 日志设置:
    • logging.dest: 日志文件路径。
    • logging.verbose: 是否启用详细日志。
  • 监控和报警:
    • xpack.monitoring.ui.container.elasticsearch.enabled: 是否启用 Elasticsearch 监控 UI。
    • xpack.monitoring.ui.container.kibana.enabled: 是否启用 Kibana 监控 UI。
  • 安全设置:
    • xpack.security.enabled: 是否启用 X-Pack 安全功能。
    • xpack.security.encryptionKey: 用于加密敏感数据的密钥。
  • 其他设置:
    • i18n.locale: Kibana 的默认语言环境。

FIlebeat

配置文件路径

  • rpm包/yum安装
    | 文件路径 | 用途 |
    | — | — |
    | /etc/filebeat/ | 配置文件路径 |
    | ./modules.d | Filebeat的所有模块 |
    | ./filebeat.yml | Filebeat规则配置文件 |
    | /var/lib/filebeat/ | 数据文件路径 |
    | ./registry/filebeat/log.json | Filebeat日志采集记录文件 |
    | /usr/share/filebeat/ | Filebeat安装路径 |

默认配置文件

  • filebeat.yml

filebeat.yml

配置文件详解

  • 默认配置文件解释
#定义Filebeat收集配置
filebeat.inputs:
#定义Filebeat的收集数据类型
- type: filestream
  id: my-filestream-id
  #定义收集器是否开启,默认true表示开启,false表示关闭
  enabled: false
  #定义要监控日志的路径
  paths:
    #定义具体日志的路径,可以定义多个日志文件
    - /var/log/*.log
    
#定义Filebeat使用的模版模块
filebeat.config.modules:
  #指定模板模块路径
  path: ${path.config}/modules.d/*.yml
  #指定模板是否支持热加载,默认false表示禁止,true表示允许
  reload.enabled: false

#定义Elasticsearch模板配置
setup.template.settings:
  #定义Elasticsearch中每个索引的主分片数量,单位个
  index.number_of_shards: 1
  #定义Elasticsearch中每个索引的副本分片数量,单位个(注意:设置的副本数量需要小于Elasticsearch集群的主机数量)
  index.number_of_replicas: 1
  #定义Elasticsearch中每个索引的刷新频率,单位秒(s)
  index.refresh_interval: 5s

#定义Kibana的连接和交互
setup.kibana:
  #定义Kibana的主机地址和端口
  host: "localhost:5601"
  #定义Kibana的用户名称
  username: "my-kibana-username"
  #定义Kibana的用户密码
  password: "my-kibana-password"

#定义Filebeat输出位置,此次输出到elasticsearch
output.elasticsearch:
  #定义数据目的主机
  hosts: ["localhost:9200"]

#定义数据输出之前对事件的处理
processors:
  - add_host_metadata:
      when.not.contains.tags: forwarded
  - add_cloud_metadata: ~
  - add_docker_metadata: ~
  - add_kubernetes_metadata: ~

应用案例解释

  • Filebeat配置多个log输出实例
filebeat.inputs:
#定义Nginx日志收集
- type: log
  enabled: true
  paths:
  - /usr/local/nginx/logs/*.log*
  
#定义Tomcat日志收集
- type: log
  enabled: true
  paths:
  - /usr/local/tomcat/logs/*
  
#定义日志输出
output.elasticsearch:
  hosts: ["localhost:9200"]
  • 自定义分片数量
filebeat.inputs:
#定义Nginx日志收集
- type: log
  enabled: true
  paths:
  - /usr/local/nginx/logs/*.log*
  
#定义Tomcat日志收集
- type: log
  enabled: true
  paths:
  - /usr/local/tomcat/logs/*
  
#定义Elasticsearch模板配置
setup.template.settings:
  #定义Elasticsearch中每个索引的主分片数量,单位个
  index.number_of_shards: 3
  #定义Elasticsearch中每个索引的副本分片数量,单位个(注意:设置的副本数量需要小于Elasticsearch集群的主机数量)
  index.number_of_replicas: 2
  #定义Elasticsearch中每个索引的刷新频率,单位秒(s)
  index.refresh_interval: 5s

#定义日志输出
output.elasticsearch:
  hosts: ["localhost:9200"]
  • 自定义索引名称
filebeat.inputs:
#定义Nginx日志收集
- type: log
  enabled: true
  paths:
  - /usr/local/nginx/logs/*.log*
  
#定义Tomcat日志收集
- type: log
  enabled: true
  paths:
  - /usr/local/tomcat/logs/*
  
#定义Elasticsearch模板配置
setup.template.settings:
  #定义Elasticsearch中每个索引的主分片数量,单位个
  index.number_of_shards: 3
  #定义Elasticsearch中每个索引的副本分片数量,单位个(注意:设置的副本数量需要小于Elasticsearch集群的主机数量)
  index.number_of_replicas: 2
  #定义Elasticsearch中每个索引的刷新频率,单位秒(s)
  index.refresh_interval: 5s

#禁用索引生命周期管理(如果不禁用,自定义索引无法生效)
setup.ilm.enabled: false
#自定义索引名称
setup.template.name: "app-logs"
#自定义索引匹配规则
setup.template.pattern: "app-logs*"
#自定义是否覆盖索引,true表示覆盖索引,false表示不覆盖
setup.template.overwrite: false

#定义日志输出
output.elasticsearch:
  hosts: ["localhost:9200"]
  #引用自定义索引
  index: "app-logs-%{+yyyy.MM.dd}"
  • 根据tag字段写入不同的索引
filebeat.inputs:
#定义Nginx日志收集
- type: log
  enabled: true
  paths:
  - /usr/local/nginx/logs/*.log*
  #自定义tag
  tags: ["Nginx", "logs"]
  
#定义Tomcat日志收集
- type: log
  enabled: true
  paths:
  - /usr/local/tomcat/logs/*
  #自定义tag
  tags: ["Tomcat", "logs"]
  
#定义Elasticsearch模板配置
setup.template.settings:
  #定义Elasticsearch中每个索引的主分片数量,单位个
  index.number_of_shards: 3
  #定义Elasticsearch中每个索引的副本分片数量,单位个(注意:设置的副本数量需要小于Elasticsearch集群的主机数量)
  index.number_of_replicas: 2
  #定义Elasticsearch中每个索引的刷新频率,单位秒(s)
  index.refresh_interval: 5s

#禁用索引生命周期管理(如果不禁用,自定义索引无法生效)
setup.ilm.enabled: false
#自定义索引名称
setup.template.name: "app-logs"
#自定义索引匹配规则
setup.template.pattern: "app-logs*"
#自定义是否覆盖索引,true表示覆盖索引,false表示不覆盖
setup.template.overwrite: false

#定义日志输出
output.elasticsearch:
  hosts: ["localhost:9200"]
  #根据tag字段写入不同的索引
  indices:
    #引用自定义索引
    - index: "app-logs-nginx-%{+yyyy.MM.dd}"
      #匹配指定字段包含的内容
      when.contains:
        tags: "Nginx"
    - index: "app-logs-tomcat-%{+yyyy.MM.dd}"
      when.contains:
        tags: "Tomcat"

常用配置参数

  • inputs
    • type: 输入类型,如 log、stdin、tcp 等。
    • enabled: 是否启用该输入。
    • paths: 日志文件的路径列表。
    • exclude_files: 排除匹配特定模式的文件。
    • include_lines: 只包含匹配特定正则表达式的行。
    • exclude_lines: 排除匹配特定正则表达式的行。
    • encoding: 文件编码格式。
  • outputs
    • elasticsearch: Elasticsearch 输出的配置
      • hosts: Elasticsearch 实例的地址列表。
      • username: Elasticsearch 认证用户名。
      • password: Elasticsearch 认证密码。
    • logstash: Logstash 输出的配置
      • hosts: Logstash 实例的地址列表。
    • kafka: Kafka 输出的配置
      • hosts: Kafka 集群的地址列表。
      • topic: Kafka 的 topic 名称。
    • redis: Redis 输出的配置
      • hosts: Redis 实例的地址列表。
      • port: Redis 实例的监听端口。
      • password: Redis 实例的密码。
      • timeout: Redis 实例的连接超时时间。
  • setup
    • ilm.enable: 索引生命周期设置
    • template.name: 自定义索引名称
    • template.pattern: 自定义索引匹配模式
    • template.overwrite: 已有模板设置
    • template.settings: 分片设置
      • index.number_of_shards: 指定分片数量
      • index.number_of_replicas: 指定副本分片数量
      • index.refresh_interval: 指定刷新时间

输出格式解析

  • 输出内容
{
  "@timestamp": "2024-06-17T05:50:44.919Z",
  "@metadata": {
    "beat": "filebeat",
    "type": "_doc",
    "version": "7.17.22"
  },
  "host": {
    "name": "elk-node-03"
  },
  "log": {
    "offset": 0,
    "file": {
      "path": ""
    }
  },
  "message": "111",
  "input": {
    "type": "stdin"
  },
  "agent": {
    "id": "0be50aa4-7a96-4594-8399-a19068a92534",
    "name": "elk-node-03",
    "type": "filebeat",
    "version": "7.17.22",
    "hostname": "elk-node-03",
    "ephemeral_id": "8fa73ddd-1c82-4554-bcd2-52867ff6fa06"
  },
  "ecs": {
    "version": "1.12.0"
  }
}
  • 输出解释
  1. timestamp:时间戳字段,表示读取到改行内容的时间
  2. metadata:元数据字段,跟logstash进行交互使用
  3. beat:beate属性信息
  4. type:beate类型信息
  5. version:beate版本信息
  6. host:主机名字段,输出主机名,如果没有主机名,输出主机对应的ip
  7. log:日志信息
  8. offset:日志的偏移量
  9. file:日志文件信息
  10. path:日志来源路径
  11. message:日志内容
  12. input:日志输入信息
  13. type:日志数据类型
  14. agent:Filebeat客户端信息
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值