一、前期服务器环境准备
1.本次选用openEuler 22.03,vcpu 2,内存4G及以上,系统盘20G,数据盘50G,主机名统一设置为linux-hostX
应用名称 | 数量 | 软件版本 | 服务器IP | 主机名 |
---|---|---|---|---|
elasticsearch | 2台 | 8.17.2 | 192.168.137.101,102 | linux-host1,linux-host2 |
logstash/kibana | 1台 | 8.17.2 | 192.168.137.103 | linux-host3 |
二、部署elasticsearch
2.elasticsearch服务器环境初始化,在规划的两台es服务器上都操作
#设置主机名
[root@linux-host1 ~]# hostnamectl set-hostname linux-host1
[root@linux-host1 ~]# vim /etc/hosts
192.168.137.101 linux-host1
192.168.137.102 linux-host2
192.168.137.103 linux-host3
#关闭防火墙和selinux,避免出现因为防火墙策略或selinux安全权限引起的各种
未知问题
[root@linux-host1 ~]# systemctl stop firewalld && systemctl disable firewalld
[root@linux-host1 ~]# sed -i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config
[root@linux-host1 ~]# echo "* soft nofile 65536" >> /etc/security/limits.conf
[root@linux-host1 ~]# echo "* hard nofile 65536" >> /etc/security/limits.conf
#修改修改/etc/sysctl.conf文件,增加配置vm.max_map_count=655360
[root@linux-host1 ~]# vim /etc/sysctl.conf
vm.max_map_count=655360
[root@linux-host1 ~]# sysctl -p
#新增es用户设置密码,为了安全,els机器都执行使用es启动
[root@linux-host1 ~]# useradd es
[root@linux-host1 ~]# passwd es #密码自由设置
3.安装软件,在规划的两台es服务器上都操作
#解压提前下载好的包到指定路劲下
[root@linux-host1 ~]# tar -xvf elasticsearch-8.17.2-linux-x86_64.tar.gz -C /opt
[root@linux-host1 ~]# vim /etc/profile
#添加以下内容:
export JAVA_HOME=/opt/elasticsearch-8.17.2/jdk
export ES_HOME=/opt/elasticsearch-8.17.2
export PATH=$ES_HOME/bin:$PATH
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH
export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin
export PATH=$PATH:${JAVA_PATH}
4.在host1上完成elasticsearch配置,建立证书
#创建及证书存放目录
[root@linux-host1 ~]# mkdir /opt/elasticsearch-8.17.2/certs
#设置集群通信密钥,(注意:切换到es用户)
[root@linux-host1 ~]# su - es
[es@linux-host1 ~]# cd /opt/elasticsearch-8.17.2/bin
#执行以下命令签发ca证书,中间过程按回车即可
[es@linux-host1 bin]# ./elasticsearch-certutil ca
# 用ca证书签发节点证书,中间过程按回车即可
[es@linux-host1 bin]# ./elasticsearch-certutil cert --ca elastic-stack-ca.p12
# 将生成的证书文件移动到之前创建的证书目录certs中,即/opt/elasticsearch-8.17.2/certs
[es@linux-host1 elasticsearch-8.17.2]# mv ./elastic-stack-ca.p12 elastic-certificates.p12 /opt/elasticsearch-8.17.2/certs
# 签发Https证书
[es@linux-host1 elasticsearch-8.17.2] cd bin
[es@linux-host1 bin]# ./elasticsearch-certutil http
#遇到以下设置,可按照下列选项输入
# Generate a CSR? [y/N] 输入N
# Use an existing CA? [y/N] 输入y
# CA Path: 输入 /opt/elasticsearch-8.17.2/certs/elastic-stack-ca.p12
# Password for elastic-stack-ca.p12: 回车
# For how long should your certificate be valid? [5y] 输入5y
# Generate a certificate per node? [y/N] 输入N
# Enter all the hostnames that you need, one per line:输入name,每个一行
linux-host1
linux-host2
# Is this correct [Y/n] 输入Y
# Enter all the IP addresses that you need, one per line. 输入:三台机器的ip:
192.168.137.101
192.168.137.102
# Is this correct [Y/n] 输入 Y
# Do you wish to change any of these options? [y/N] 输入N
# 连续两次回车
# Zip file written to /opt/elasticsearch-8.17.2/elasticsearch-ssl-http.zip
[es@linux-host1 bin]# cd ..
#解压elasticsearch-ssl-http.zip
[es@linux-host1 elasticsearch-8.17.2]# unzip elasticsearch-ssl-http.zip
#移动证书到指定路径下
[es@linux-host1 elasticsearch-8.17.2]# mv ./elasticsearch/http.p12 ./kibana/elasticsearch-ca.pem ./certs
#将证书分发到其他节点
[es@linux-host1 elasticsearch-8.17.2]# cd certs
[es@linux-host1 elasticsearch-8.17.2]# scp * root@linux-host2:/opt/elasticsearch-8.17.2/certs
5.修改elasticsearch配置文件,并修改host2,elasticsearch节点的配置文件中的节点名称:elasticsearch.yml
#使用root用户切换到elasticsearch安装目录下
[root@linux-host1 elasticsearch-8.17.2]# vim config/elasticsearch.yml
#设置es集群名称
cluster.name: es-cluster
#设置集群中当前节点名称
node.name: es-node1
#设置数据,日志文件路径
path.data: /data/elk/data
path.logs: /data/elk/logs
#设置网络访问节点
#network和端口号要配置,担心安全问题,可把host设置成访问此elasticsearch服务器的ip地址,就是设置成唯一访问。 也可以配置成 network.host: 0.0.0.0
network.host: 0.0.0.0
#设置网络访问端口
http.port: 9200
discovery.seed_hosts: ["192.168.137.101", "192.168.137.102"]
cluster.initial_master_nodes: ["es-node1", "es-node2"]
#安全认证
xpack.security.enabled: false
xpack.security.enrollment.enabled: false
xpack.security.http.ssl:
enabled: false
keystore.path: /opt/elasticsearch-8.17.2/certs/http.p12
truststore.path: /opt/elasticsearch-8.17.2/certs/http.p12
6.修改es相关目录属主属组,es主机都执行
[root@linux-host1 ~]# chown -R es:es /opt/elasticsearch-8.17.2
[root@linux-host1 ~]# chown -R es:es /data/elk
7.启动elasticsearch,无顺序要求,只要大于2台,就可以启动集群,这是es的无主模式,自动识别集群并选举
[root@linux-host1 ~]# su - es
[es@linux-host1 ~]# /opt/elasticsearch-8.17.2/bin/elasticsearch -d
[es@linux-host1 ~]# ps -ef|grep elastic
8.通过浏览器访问elasticsearch服务端口或通过shell命令查看es信息
#通过浏览器访问elasticsearch服务端口
http://192.168.137.101:9200 查看es集群信息
#shell命令查看es信息
#通过命令获取集群状态:
[root@linux-host1 ~]# curl –sXGET http://192.168.137.101:9200/_cluster/health?pretty=true
#获取到的是一个json格式的返回值,对status 进行分析,如果显示green就是运行在正常,yellow表示副本分片丢失,red(红色)表示主分片丢失。
{
"cluster_name" : "ELK-Cluster",
"status" : "green",
"timed_out" : false,
"number_of_nodes" : 2,
"number_of_data_nodes" : 2,
"active_primary_shards" : 0,
"active_shards" : 0,
"relocating_shards" : 0,
"initializing_shards" : 0,
"unassigned_shards" : 0,
"unassigned_primary_shards" : 0,
"delayed_unassigned_shards" : 0,
"number_of_pending_tasks" : 0,
"number_of_in_flight_fetch" : 0,
"task_max_waiting_in_queue_millis" : 0,
"active_shards_percent_as_number" : 100.0
}
三、部署logstash
#设置主机名
[root@linux-host3 ~]# hostnamectl set-hostname linux-host3
#关闭防火墙和selinux,避免出现因为防火墙策略或selinux安全权限引起的各种
未知问题
[root@linux-host3 ~]# systemctl stop firewalld && systemctl disable firewalld
[root@linux-host3 ~]# sed -i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config
[root@linux-host3 ~]# vim /etc/hosts
192.168.137.101 linux-host1
192.168.137.102 linux-host2
192.168.137.103 linux-host3
#解压提前下载好的包到指定路径下
[root@linux-host3 ~]# tar -xvf logstash-8.17.2-linux-x86_64.tar.gz -C /opt
9.进入解压好的软件安装目录修改logstash配置文件
9.1 修改logstash.conf配置文件
#进入安装目录编辑配置文件,切换到config目录下
[root@linux-host3 ~]# cd /opt/logstash-8.17.2/config
#此目录下有logstash-sample.conf,pipelines.yml等配置文件,配置logstash-sample.conf
[root@linux-host3 config]# cp logstash-sample.conf logstash.conf
[root@linux-host3 config]# vim logstash.conf
#添加内容可依据logstash-sample.conf示例文件设置
input {
beats {
port => 5044
}
}
output {
elasticsearch {
hosts => ["http://192.168.137.101:9200"]
index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
#user => "elastic"
#password => "changeme"
}
}
功能:从Beats输入数据并将其发送到Elasticsearch。
Input部分:定义了输入插件,指定Logstash从哪个来源接收数据。该处使用Beats输入插件,其监听端口 5044,以接收从Beats发送的数据。Beats是一组轻量级数据采集器,通常用于收集服务器日志和监控数据。
Output部分:该部分定义了输出插件,指定Logstash应该将接收到的数据发送到哪个目标。使用的是 Elasticsearch输出插件,它将数据发送到Elasticsearch集群。可以看到以下配置选项:
hosts:指定了Elasticsearch 集群的主机地址和端口。在这里,数据将被发送到本地主机的 Elasticsearch服务,端口为9200。
index:定义数据在Elasticsearch中的索引名称。这里使用了Logstash的动态索引命名,基于数据的 metadata信息和日期来生成索引名称。
user 和 password:通常用于指定连接Elasticsearch集群所需的用户名和密码。若Elasticsearch集群需要身份验证,可以取消注释并提供正确的用户名和密码。
附:也可使用以下配置(特别说明:借鉴其他大佬分享的代码配置)
input {
tcp {
mode => "server"
host => "0.0.0.0"
port => 5670
codec => json_lines
}
}
filter {
}
output {
elasticsearch {
hosts => ["http://es服务器ip:port"]
index => "log-goboy-dev-%{+yyyy.MM.dd}"
}
}
功能:用于接收来自 TCP 输入的 JSON 格式日志数据,并将其发送到 Elasticsearch 中。每天都会创建一个新的索引以便于日志的时间分割。确保 Logstash 和 Elasticsearch 服务正在运行,并监听相应的端口(例如,5044 和 9200),以使这个配置文件正常工作。
Input 部分:
tcp
插件被用作输入插件,它监听端口 5670并接受传入的 TCP 连接。
mode => "server"
表示 Logstash 将以服务器模式运行,等待来自客户端的连接。
host => "0.0.0.0"
指定 Logstash 应该接受所有网络接口上的连接,因此可以从任何 IP 地址连接到 Logstash。
port => 5670
指定监听的端口号为 5670。
codec => json_lines
表示接收到的数据将被解析为 JSON 格式的行。
Filter 部分:在你的配置中,过滤器部分是空的。这意味着 Logstash 不会对接收的数据进行进一步的处理或筛选。你可以在这部分添加过滤器插件,以根据需要对数据进行处理、转换或过滤。
Output 部分:
elasticsearch
输出插件用于将数据发送到 Elasticsearch。
hosts => ["es服务器ip:port"]
指定了 Elasticsearch 集群的主机地址和端口。
index => "log-goboy-dev-%{+yyyy.MM.dd}"
定义了数据在 Elasticsearch 中的索引名称。这里使用 Logstash 的动态索引命名,基于日期来生成索引名称。
9.2 修改pipelines.yml管道文件
[root@linux-host3 config]# vim pipelines.yml
- pipeline.id: mylogs
path.config: "/opt/logstash-8.17.2/config/logstash.conf"
pipeline.id:指定该管道id。
path.config:指定es和logstash连接的配置文件,就是新建的logstash.conf文件的绝对路径。
10. 测试 logstash
#测试标准输入和输出
[root@linux-host3 logstash-8.17.2]# ./bin/logstash -e 'input { stdin{} } output { stdout{ codec => rubydebug }}'
hello
#测试输出到文件
[root@linux-host3 logstash-8.17.2]# ./bin/logstash -e 'input { stdin{} } output { file { path => "/tmp/log-%{+YYYY.MM.dd}messages.gz"}}'
输入hello
#打开文件验证
[root@linux-host3 config]# tail /tmp/log-2025.03.02messages.gz
{"message":"","@timestamp":"2025-03-02T15:58:09.488415055Z","event":{"original":""},"@version":"1","host":{"hostname":"linux-host3"}}
{"message":"hello","@timestamp":"2025-03-02T15:58:11.885616591Z","event":{"original":"hello"},"@version":"1","host":{"hostname":"linux-host3"}}
#测试输出到elasticsearch
[root@linux-host3 logstash-8.17.2]# ./bin/logstash -e 'input { stdin{} } output { elasticsearch {hosts => ["192.168.56.11:9200"] index => "test1-%{+YYYY.MM.dd}" }}'
#服务器验证收到数据
[root@linux-host1 ~]# ls /data/elk/data/indices
4qM5yGDOQqyMnuX6lxEYIg c_U8n0qhQGqK6Jbt2wcJyg McugvEruRBO43LUTSE4A8A
四、部署kibana
11.kibana和logstashg共用一台服务器,部署logsash已配置基础环境,此处不再说明
#解压提前下载好的包到指定路径下
[root@linux-host3 ~]# tar -xvf kibana-8.17.2-linux-x86_64 -C /opt
11.1修改配置文件kibana.yml
#修改配置文件kibana.yml
[root@linux-host3 ~]# cd /opt/kibana-8.17.2/config
[root@linux-host3 config]# vim kibana.yml
#添加以下配置
server.port: 5601
server.host: "linux-host3"
server.name: "linux-host3"
elasticsearch.hosts: ["http://192.168.137.101:9200"]
i18n.locale: "zh-CN"
11.2启动kibana,需保证elasticsearch正常启动
#进入kibana目录下
[root@linux-host3 kibana-8.17.2]# ./bin/kibana --allow-root &
#第二种启动:
[root@linux-host3 ~]# nohup /opt/kibana-8.17.2/bin/kibana --allow-root &
11.3通过浏览器访问kibana服务端口查看信息
#通过浏览器访问elasticsearch服务端口 http://192.168.137.103:5601
#通过访问http://192.168.137.103:5601/status,查看kibana状态