记:搭建一套ELK日志收集系统实践

一、前期服务器环境准备

1.本次选用openEuler 22.03,vcpu 2,内存4G及以上,系统盘20G,数据盘50G,主机名统一设置为linux-hostX

应用名称数量软件版本服务器IP主机名
elasticsearch2台8.17.2192.168.137.101,102linux-host1,linux-host2
logstash/kibana1台8.17.2192.168.137.103linux-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状态

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值