Linux部署elk 8.5.3 教程

Linux(centos)部署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端口号(云服务器注意防火墙端口号是否打开):

https://43.142.111.235: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,内存信息了。

 

全文结束

 

体验一下,说不定哪天就不可用了,哈哈

http://43.142.111.235:5601/

elastic

Tz0gULctQ2SbQF0b8GxT

posted @ 2022-12-25 00:26  ENU  阅读(2372)  评论(0编辑  收藏  举报