Linux部署elk 8.5.3 教程
下载安装包
elasticsearch
https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.5.3-linux-x86_64.tar.gz
kibana
https://artifacts.elastic.co/downloads/kibana/kibana-8.5.3-linux-x86_64.tar.gz
logstash
https://artifacts.elastic.co/downloads/logstash/logstash-8.5.3-linux-x86_64.tar.gz
filebeat
https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-8.5.3-linux-x86_64.tar.gz
metricbeat
https://artifacts.elastic.co/downloads/beats/metricbeat/metricbeat-8.5.3-linux-x86_64.tar.gz
下载完成如下:
[esuser@VM-12-16-centos elk]$ pwd
/opt/elk
[esuser@VM-12-16-centos elk]$ ll
total 1195028
-rw-r--r-- 1 root root 580678137 Dec 9 01:01 elasticsearch-8.5.3-linux-x86_64.tar.gz
-rw-r--r-- 1 root root 40125224 Dec 9 00:52 filebeat-8.5.3-linux-x86_64.tar.gz
-rw-r--r-- 1 root root 223252007 Dec 9 01:13 kibana-8.5.3-linux-x86_64.tar.gz
-rw-r--r-- 1 root root 331310588 Dec 9 01:17 logstash-8.5.3-linux-x86_64.tar.gz
-rw-r--r-- 1 root root 48322398 Dec 9 00:56 metricbeat-8.5.3-linux-x86_64.tar.gz
ES安装
安全原因,ES不能使用root用户启动,所以先创建新用户,
useradd -m esuser
passwd esuser 回车输入密码:esuser123
授予esuser用户目录权限
chown -R esuser:esuser /opt/elk
切换到esuser
su - esuser
解压
tar -zxvf elasticsearch-8.5.3-linux-x86_64.tar.gz
解压后config目录下有三个配置文件
elasticsearch.yml es相关设置
jvm.options Java虚拟机相关设置,主要就堆大小设置,可以先默认。
log4j2.properties 日志相关设置,可以先默认。
由于我机器内存小,我将其设置为250m
vim jvm.options 设置如下:
-Xms250m
-Xmx250m
elasticsearch.yml做如下相关设置,更多配置自己去查阅
//集群名称一致
cluster.name: my-cluster
//不配置只能本机访问,设置为访问节点ip 即同时设置 network.bind_host 和 network.publish_host
network.host: 0.0.0.0
ingest.geoip.downloader.enabled: false
配置 ingest.geoip.downloader.enabled 是为了解决如下错误,启动后可能会有如下错误信息,不影响使用,就是启动时会去更新地图的一些数据库,这里先直接禁掉即可
[2022-12-22T21:12:04,858][ERROR][o.e.i.g.GeoIpDownloader ] [VM-12-16-centos] exception during geoip databases updateorg.elasticsearch.ElasticsearchException: not all primary shards of [.geoip_databases] index are active
at org.elasticsearch.ingest.geoip@8.5.3/org.elasticsearch.ingest.geoip.GeoIpDownloader.updateDatabases(GeoIpDownloader.java:134)
切换回root用户,对系统做如下配置,否则启动es可能报错
/etc/sysctl.conf
#不设置可能报这个错,虚拟内存不够。
#max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
vm.max_map_count=262144
保存然后执行命令刷新
sysctl -p
/etc/security/limits.conf
#不设置可能报这个错,用户能创建的线程数不够
#max number of threads [1024] for user [esuser] is too low, increase to at least [4096]
esuser - nproc 4096
#不设置可能报这个错,用户能打开的最大文件数不够
#max file descriptors [65535] for elasticsearch process is too low, increase to at least [65536]
esuser - nofile 65536
保存后退出账号重新登录即可生效
使用esuser账号在bin目录下 执行如下命令 启动es
./elasticsearch
#要将Elasticsearch作为守护程序运行,命令如下,第一次建议按上述命令启动,可查看报错信息以及密码令牌等信息
./elasticsearch -d -p pid
输出如下:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ Elasticsearch security features have been automatically configured!
✅ Authentication is enabled and cluster connections are encrypted.
ℹ️ Password for the elastic user (reset with `bin/elasticsearch-reset-password -u elastic`):
Tz0gULctQ2SbQF0b8GxT
ℹ️ HTTP CA certificate SHA-256 fingerprint:
5619e2399373a8e089019ebdcc067447071afc6ec1730a009b3b1d66999e9502
ℹ️ Configure Kibana to use this cluster:
• Run Kibana and click the configuration link in the terminal when Kibana starts.
• Copy the following enrollment token and paste it into Kibana in your browser (valid for the next 30 minutes):
eyJ2ZXIiOiI4LjUuMyIsImFkciI6WyIxMC4wLjEyLjE2OjkyMDAiXSwiZmdyIjoiNTYxOWUyMzk5MzczYThlMDg5MDE5ZWJkY2MwNjc0NDcwNzFhZmM2ZWMxNzMwYTAwOWIzYjFkNjY5OTllOTUwMiIsImtleSI6IlljMEtPb1VCY1Y2V2RRSjJVRXJrOnNsOXZLQ05SU0t5eHpnU0lkMThkQkEifQ==
ℹ️ Configure other nodes to join this cluster:
• Copy the following enrollment token and start new Elasticsearch nodes with `bin/elasticsearch --enrollment-token <token>` (valid for the next 30 minutes):
eyJ2ZXIiOiI4LjUuMyIsImFkciI6WyIxMC4wLjEyLjE2OjkyMDAiXSwiZmdyIjoiNTYxOWUyMzk5MzczYThlMDg5MDE5ZWJkY2MwNjc0NDcwNzFhZmM2ZWMxNzMwYTAwOWIzYjFkNjY5OTllOTUwMiIsImtleSI6IllzMEtPb1VCY1Y2V2RRSjJVRXJyOkg4VnA4alZLUTA2OTFibUhsQThyVHcifQ==
If you're running in Docker, copy the enrollment token and run:
`docker run -e "ENROLLMENT_TOKEN=<token>" docker.elastic.co/elasticsearch/elasticsearch:8.5.3`
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
ES首次启动有如下默认行为
- 启用身份验证和授权,并生成密码 内置超级用户。`elastic`
- TLS 的证书和密钥是为传输层和 HTTP 层生成的, 并且 TLS 已启用并配置了这些密钥和证书。
- 将为 Kibana 生成一个注册令牌,有效期为 30 分钟。
所以浏览器用https访问9200端口号(云服务器注意防火墙端口号是否打开):
这里会要求输入账号密码,输入后显示如下
{
"name": "VM-12-16-centos",
"cluster_name": "my-cluster",
"cluster_uuid": "_IPEl7VmT6mOEypbyp-cyw",
"version": {
"number": "8.5.3",
"build_flavor": "default",
"build_type": "tar",
"build_hash": "4ed5ee9afac63de92ec98f404ccbed7d3ba9584e",
"build_date": "2022-12-05T18:22:22.226119656Z",
"build_snapshot": false,
"lucene_version": "9.4.2",
"minimum_wire_compatibility_version": "7.17.0",
"minimum_index_compatibility_version": "7.0.0"
},
"tagline": "You Know, for Search"
}
如果没有保存账号信息,在bin目录下执行如下命令即可重置密码。
elasticsearch-reset-password -u elastic
kibana安装
kibana默认也不允许用root账号启动,这里也用esuser账号操作
解压
tar -zxvf kibana-8.5.3-linux-x86_64.tar.gz
config/kibana.yml 添加如下配置
#设置端口
server.port: 5601
#设置主机ip,不设置默认localhsot,远程无法访问,只能本机访问
server.host: "0.0.0.0"
#设置中文
i18n.locale: "zh-CN"
设置内存,内存够的不用考虑,略过
vim /bin/kibana,在最后一行前加如下语句
NODE_OPTIONS="$NODE_OPTIONS --max-old-space-size=400"
加完后如下:
#!/bin/sh
SCRIPT=$0
# SCRIPT may be an arbitrarily deep series of symlinks. Loop until we have the concrete path.
while [ -h "$SCRIPT" ] ; do
ls=$(ls -ld "$SCRIPT")
# Drop everything prior to ->
link=$(expr "$ls" : '.*-> \(.*\)$')
if expr "$link" : '/.*' > /dev/null; then
SCRIPT="$link"
else
SCRIPT=$(dirname "$SCRIPT")/"$link"
fi
done
DIR="$(dirname "${SCRIPT}")/.."
CONFIG_DIR=${KBN_PATH_CONF:-"$DIR/config"}
NODE="${DIR}/node/bin/node"
test -x "$NODE"
if [ ! -x "$NODE" ]; then
echo "unable to find usable node.js executable."
exit 1
fi
if [ -f "${CONFIG_DIR}/node.options" ]; then
KBN_NODE_OPTS="$(grep -v ^# < ${CONFIG_DIR}/node.options | xargs)"
fi
NODE_OPTIONS="${NODE_OPTIONS:=--max-old-space-size=400}"
NODE_OPTIONS="--no-warnings --max-http-header-size=65536 $KBN_NODE_OPTS $NODE_OPTIONS" NODE_ENV=production exec "${NODE}" "${DIR}/src/cli/dist" ${@}
在bin目录下启动
./kibana
后台启动,第一次建议不要后台启动
nohup ./kibana &
然后浏览器访问
http://43.142.111.235:5601/
此时会要求输入es生产的令牌,如果此时已经超过半个小时,es生产的令牌已经失效,就重新生成一个
如果上面的令牌还有效就不用再生成了,不然就在es的bin目录下执行如下命令
./elasticsearch-create-enrollment-token -s kibana
输入令牌后
继续输入控制台高亮显示的url上的六位数字
继续输入es的账号密码就成功进入界面
logstash安装
这里也以esuser用户操作
解压
tar -zxvf logstash-8.5.3-linux-x86_64.tar.gz
config目录中 配置jvm.options,内存大的可以不用考虑,默认1g
-Xms256m
-Xmx256m
在config目录中新建一个配置文件
touch logstash-simple.conf
然后输入如下内容保存,表示从控制台和filebeat的5044端口作为输入,然后两个过滤器,然后输出到控制台和es中。
input {
stdin {}
beats {
port => 5044
}
}
filter {
grok {
match => { "message" => "%{COMBINEDAPACHELOG}" }
}
date {
match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ]
}
}
output {
stdout {}
elasticsearch {
hosts => ["https://43.142.111.235:9200"]
index => "my-es-index"
user => "elastic"
password => "Tz0gULctQ2SbQF0b8GxT"
cacert => "/opt/elk/elasticsearch-8.5.3/config/certs/http_ca.crt"
}
}
然后在目录中执行如下命令启动
./bin/logstash -f ./config/logstash-simple.conf
这里遇见一个坑,在bin目录执行如下命令,居然说找不到配置文件。
./logstash -f ../config/logstash-simple.conf
后台运行命令
nohup ./bin/logstash -f ./config/logstash-simple.conf &
然后直接在控制台输入文字,该文字就会被输出到控制台和es中。
filebeat安装
这里也用esuser操作
解压
tar -zxvf filebeat-8.5.3-linux-x86_64.tar.gz
新建配置文件 filebeat-config.yml,内容如下,表示抓取logs目录下所有文件内容传到logstash,当然也可以加*.log来过滤文件等
同时在elk目录下建立一个logs目录用来存放日志文件测试用,配置文件如下
filebeat.inputs:
- type: filestream
paths:
- /opt/elk/logs/*
output.logstash:
hosts: ["localhost:5044"]
启动
./filebeat -e -c filebeat-config.yml
后台启动
nohup ./filebeat -e -c filebeat-config.yml &
然后在logs目录下随便新建的文件,输入一些内容,这些内容就输出到es中了。
测试一下
然后打开kibana,找到Discover,点击创建视图,选中我们刚刚创建的索引,就可以在里面搜索,我们之前输入到logs目录中的内容了。
至此结束。
直接filebeat输出到ES
由于logstash太占内存了,我选择filebeat直接发送数据到es,所以我使用下面的配置,该配置会在es上自动创建一个索引filebeat,并把日志文件发送到这个索引下,如果要发送到指定的索引,需要配置索引模板。这里就先不弄了。
filebeat.inputs:
- type: filestream
paths:
- /opt/elk/logs/*
output.elasticsearch:
hosts: ["https://127.0.0.1:9200"]
username: "elastic"
password: "Tz0gULctQ2SbQF0b8GxT"
ssl:
enabled: true
certificate_authorities: "/opt/elk/elasticsearch-8.5.3/config/certs/http_ca.crt"
metricbeat部署
官方参考:
https://www.elastic.co/guide/en/beats/metricbeat/current/metricbeat-installation-configuration.html
解压
tar -zxvf metricbeat-8.5.3-linux-x86_64.tar.gz
然后在metricbeat.yml配置如下输出信息,和filebeat差不多,都是配置输出到es
output.elasticsearch:
hosts: ["https://127.0.0.1:9200"]
username: "elastic"
password: "Tz0gULctQ2SbQF0b8GxT"
ssl:
enabled: true
certificate_authorities: "/opt/elk/elasticsearch-8.5.3/config/certs/http_ca.crt"
使用下面命令可以列出支持的模块信息,即我们要监控的软件,系统等,比如 system,redis,mysql,es等。
./metricbeat modules list
如下命令表示启用elasticsearch模块,这里我们啥都不启用,默认就监控system。
./metricbeat modules enable elasticsearch
然后执行如下命令,该命令会根据启用的模块,在es和kibana中帮我们预定义生成索引和可视化数据
./metricbeat setup -e
然后执行如下命令,如果当前用户没有sudo权限参考:https://blog.csdn.net/qqnbsp/article/details/82220735
sudo chown root metricbeat.yml
#如果需要启用别的模块,也需要对应的执行下该命令如sudo chown root modules.d/elasticsearch.yml
sudo chown root modules.d/system.yml
sudo ./metricbeat -e
#可以用root用户执行如下命令来后台执行
nohup ./metricbeat -e &
然后在侧边导航栏中,单击Discover。选中metricbeat-8.5.3索引创建视图,
然后在侧边导航栏中,单击仪表板,然后选择 想要打开的仪表板就可以了,这些仪表板就是./metricbeat setup -e 命令生成的。
例如这里我选择: Metricbeat System] Overview ECS 就能查看linux系统的cpu,内存信息了。
体验一下,说不定哪天就不可用了,哈哈
elastic