1、前言
ELK 是一个开源的日志管理解决方案,主要是为了统一收集生产的日志,方便日志的查询,传统的日志都是保存在每个机器上,当要查询的时候,需要到每一台机器上去查询日志,非常麻烦,而elk则使用了三个开源软件 Elasticsearch、Logstash 和 Kibana 去统一收集所有机器产生的日志,然后存储起来,再通过页面去展示查询,大大提高了查询日志的效率,而且ELK还可以用于监控系统的性能和健康状况,以及分析用户行为和趋势
Elasticsearch:是一个分布式实时搜索和分析引擎,可以用于存储、搜索和分析各种类型的数据,包括结构化、半结构化和非结构化数据。Elasticsearch 提供了强大的搜索和聚合功能,可以帮助用户快速地查找和分析数据
Logstash:是一个开源的数据收集引擎,可以用于收集、处理和转换各种类型的数据,包括日志、指标、事件等。Logstash 支持多种输入和输出插件,可以将数据从各种来源收集,并将其发送到各种目标
Kibana:是一个开源的数据可视化工具,可以用于可视化和分析 Elasticsearch 中的数据。Kibana 提供了强大的数据可视化和分析功能,可以帮助用户快速地理解和分析数据
总的来说,ELK 是一个强大的日志管理解决方案,可以帮助用户快速地收集、存储、搜索和分析各种类型的数据,从而提高系统的可靠性和可维护性
2、主机信息
主机名称 | IP | service | port |
A | 10.1.60.114 | elasticsearch、logstash | 9200、5044 |
B | 10.1.60.115 | kibana | 5601 |
2、elk搭建
上面已经说过了elk是由Elasticsearch、Logstash 、Kibana组成,现在来分别部署一下
2.1Elasticsearch部署
需要先部署基础环境,需要用到java环境,7版本以上的es需要用jdk 11版本以上的环境
参考:jdk1.8环境配置_Apex Predator的博客-CSDN博客
优化主机,必须要优化,不优化的话elasticsearch不能被外部访问,只能被自身访问
内核优化
vi /etc/security/limits.conf
* soft nofile 65537 #用于设置进程能够打开的文件数的软限制,即当前限制。如果进程试图打开超过这个限制的文件数,系统会向其发送警告信息,但仍然允许打开文件
* soft nproc 65537 #用于设置进程数的软限制,即当前限制。如果进程试图创建超过这个限制的子进程,系统会向其发送警告信息,但仍然允许创建子进程
* hard nofile 65537 #用于设置进程能够打开的文件数的硬限制,即最大限制。如果进程试图打开超过这个限制的文件数,系统会拒绝打开文件
* hard nproc 65537 #用于设置进程数的硬限制,即最大限制。如果进程试图创建超过这个限制的子进程,系统会拒绝创建子进程
vi /etc/security/limits.d/20-nproc.conf
* soft nproc 4096 #变更soft nproc项值为4096
vi /etc/sysctl.conf
vm.max_map_count = 262144 #用于设置每个进程能够拥有的最大内存映射区域数量,这个参数通常用于支持 Elasticsearch、Logstash 等应用程序,如果这些应用程序需要使用大量内存映射区域,就需要增加这个参数的值
net.core.somaxconn = 65535 #于设置系统中每个监听套接字的最大连接数。这个参数通常用于支持高并发的网络应用程序,例如 Web 服务器。增加这个参数的值可以提高系统的并发性能
net.ipv4.ip_forward = 1 #用于启用 IP 转发功能,允许系统作为路由器转发数据包。这个参数通常用于构建复杂的网络拓扑,例如 VPN 网络
执行以下命令使配置生效
sysctl -p
在官网下载elasticsearch的安装包,本次搭建选择了7.17.10版本
下载连接:Past Releases of Elastic Stack Software | Elastic
新建目录,将安装包上传到主机中并解压更改名称
mkdir /opt/elasticsearch
cd /opt/elasticsearch
tar -zxvf elasticsearch-7.17.10-linux-x86_64.tar.gz
mv elasticsearch-7.17.10-linux-x86_64 elasticsearch
ls /opt/elasticsearch
编辑elasticsearch配置文件
vi /opt/elasticsearch/elasticsearch/config/elasticsearch.yml
node.name: es01 #编辑es名称
path.data: /opt/elasticsearch/elasticsearch/data #es数据存放路径
path.logs: /opt/elasticsearch/elasticsearch #es日志存放路径
bootstrap.memory_lock: true #内存锁配置
network.host: 0.0.0.0 #es地址,如果配置为127.0.0.1就只能本机访问
http.port: 9200 #es服务端口
discovery.seed_hosts: ["127.0.0.1", "[::1]"] #es集群地址,因为是单节点配置本机就行
cluster.initial_master_nodes: ["es01"] #es名称,因为是单节点配置本机es名称就行
以上的配置文件中,若是将host地址配置为127.0.0.1,就只能本机访问,配置文件不用加 discovery.seed_hosts和cluster.initial_master_nodes,也不用做主机优化es服务也能正常启动
创建elasticsearch服务的用户,elasticsearch服务不能使用root启动,不然会报错
groupadd elasticsearch
useradd elasticsearch -g elasticsearch -p elasticsearch #-g指定用户组 -p指定密码
chown -R elasticsearch.elasticsearch /opt/elasticsearch/elasticsearch
切换用户启动es服务
su elasticsearch
/opt/elasticsearch/elasticsearch/bin/elasticsearch -d #-d为后台启动es服务
访问es服务看是否正常
curl 10.1.60.114:9200
输出此内容表示es服务正常启动
2.2Logstash部署
安装logstash服务也需要java环境,因为和es在同一台机器上,就不需要再部署java环境了
在官网下载Logstash的安装包,本次搭建选择了7.17.10版本
Past Releases of Elastic Stack Software | Elastic
新建目录,将安装包上传到主机中并解压更改名称
mkdir /opt/logstash
cd /opt/logstatsh
tar -zxvf logstash-7.17.10-linux-x86_64.tar.gz
mv logstash-7.17.10-linux-x86_64 logstatsh
ls /opt/logstash
编辑logstash配置文件
vi /opt/logstash/logstash/config/logstash.conf
input { #日志收集
beats { #通过filebeat去收集日志
port => 5044 #logstash的监听端口
codec => "json" #设置日志根式为json
}
}
output { #将收集的日志推送到es存储
elasticsearch { #配置es参数
hosts => ["http://10.1.60.114:9200"] #es服务的地址和端口
index => "tmk-log" #指定es的索引名称
}
}
启动logstash服务
nohup /opt/logstash/logstash/bin/logstash -f /opt/logstash/logstash/config/logstash.conf > /opt/logstash/logstash/logstash.log &
查看服务是否启动
ps -ef |grep logstash
netstat -tlpn |grep 5044
一般情况下logstash与filebeat搭配使用,filebeat作为轻量级的日志收集服务,部署在每个主机上,而logstash是比较重的日志收集服务,作日志的统一归集,在发送到es上存储
2.3kibana部署
安装kibana也需要部署java环境,7版本以上的也是使用jdk 11版本以上
参考:jdk1.8环境配置_Apex Predator的博客-CSDN博客
在官网下载kibana的安装包,本次搭建选择了7.17.10版本
Past Releases of Elastic Stack Software | Elastic
新建目录,将安装包上传到主机中并解压更改名称
mkdir /opt/kibana
cd /opt/kibana
tar -zxvf kibana-7.17.10-linux-x86_64.tar.gz
mv kibana-7.17.10-linux-x86_64 kibana
ls /opt/kibana
编辑kibana配置文件
vi /opt/kibana/kibana/config/kibana.yml
server.port: 5601 #配置监听端口
server.host: "0.0.0.0" #配置访问地址
server.name: "kibana" #kibana名称
elasticsearch.hosts: ["http://127.0.0.1:9200"] #配置es服务的地址
i18n.locale: "zh-CN" #更改界面为中文模式
kibana也不能使用root用户启动,所以需要创建启动kibana服务用户
groupadd kibana
useradd kibana -g kibana -p kibana
授予权限给kibana目录
chown -R kibana.kibana /opt/kibana/kibana
切换用户启动kibana服务
su kibana
nohup /opt/kibana/kibana/bin/kibana > /opt/kibana/kibana/kibana.log &
查看kibana服务是否正常
netstat -tlpn |grep 5601
访问kibana
http://10.1.60.114:5601/