背景是公司目前服务器台数太多,出现问题后一台一台服务器登陆去查看效率低下,于是乎公司决定使用ELK搭建一套日志管理系统,在服务器间架设集群,统一管理日志。因为我之前对ELK没有一点了解,所以便拿自己的服务器作为测试,为了方便自己以后的温故和学习,决定把此次搭建的全过程记录下来。
ELK是Elasticsearch、Logstrash和Kibana这三个软件的首字母的缩写,它们代表的是一套成熟的日志管理系统:
Logstrash作为数据收集引擎。它支持动态的从各种数据源搜集数据,并对数据进行过滤、分析、丰富、统一格式等操作,然后存储到用户指定的位置,一般会发送给Elasticsearch;
Elasticsearch是个分布式搜索和分析引擎,优点是能对大容量的数据进行接近实时的存储、搜索和分析操作;
Kibana对Elasticsearch的分析搜索做出可视化的界面展示。
Filebeat,它的作用是在客户端收集和传输日志,基于 Logstash-Forwarder 源代码开发,是对它的替代.
进入elsaticsearch下载界面
选择tar进行下载,下载完成后放入/opt下(放置位置个人喜好)
进入压缩包所在目录,解压文件。
cd /opt
tar -zxvf ./elasticsearch-6.1.1.tar.gz
进入解压后文件夹的config目录,增加或者更改其中的配置信息(linux文本操作)
cd elasticsearch-6.1.1
vi config/elasticsearch.yml
# 这里指定的是集群名称,需要修改为对应的,开启了自发现功能后,ES会按照此集群名称进行集群发现
cluster.name: morty
node.name: Rick# 数据目录
path.data: /data/elk/data
# log 目录
path.logs: /data/elk/logs# 修改一下ES的监听地址,这样别的机器也可以访问
vnetwork.host: 0.0.0.0# 默认的端口号
http.port: 9200
# 填写你要监视的端口,可以是多个
discovery.zen.ping.unicast.hosts: [“172.18.5.111”, “172.18.5.112”]
# discovery.zen.minimum_master_nodes: 3
# enable cors,保证_site类的插件可以访问es
http.cors.enabled: true
http.cors.allow-origin: “*”# Centos6不支持SecComp,而ES5.2.0默认bootstrap.system_call_filter为true进行检测,所以导致检测失败,失败后直接导致ES不能启动。
bootstrap.memory_lock: false
bootstrap.system_call_filter: false
Tips:ES配置文件属性详析
修改系统参数以确保系统有足够资源启动ES
设置内核参数
vi /etc/sysctl.conf
# 增加以下参数
vm.max_map_count=655360
执行以下命令,确保生效配置生效:
sysctl -p
Tips:max_map_count
设置资源参数
vi /etc/security/limits.conf
# 修改
* soft nofile 65536
* hard nofile 131072
* soft nproc 65536
* hard nproc 131072
Tips: limits.conf 配置
设置用户资源参数
vi /etc/security/limits.d/20-nproc.conf
# 设置elk用户参数
elk soft nproc 65536
添加启动用户,设置权限
启动ElasticSearch5版本要非root用户,需要新建一个用户来启动ElasticSearch
useradd elk #创建用户elk
groupadd elk #创建组elk useradd
elk -g elk #将用户添加到组
mkdir -pv /data/elk/{data,logs}# 创建数据和日志目录
chown -R elk:elk /data/elk/ # 修改文件所有者
chown -R elk:elk /opt/elasticsearch-6.1.1/
cd elasticsearch-6.1.1
bin/elasticsearch -d #-d 为保持后台运行
使用curl localhost:9200
来检查ES是否启动成功,成功显示如下:
{
“name” : “morty”,
“cluster_name” : “Rick”,
“cluster_uuid” : “4RlZck7ERWGbQKNn5KvXGA”,
“version” : {
“number” : “6.1.1”,
“build_hash” : “bd92e7f”,
“build_date” : “2017-12-17T20:23:25.338Z”,
“build_snapshot” : false,
“lucene_version” : “7.1.0”,
“minimum_wire_compatibility_version” : “5.6.0”,
“minimum_index_compatibility_version” : “5.0.0”
},
“tagline” : “You Know, for Search”
}
下载文件
进入kibana下载界面
选择tar进行下载,下载完成后放入/opt/elk下(放置位置个人喜好)
解压文件
进入压缩包所在目录,解压文件。
cd /opt/elk
tar -zxvf ./kibana-6.1.1-linux-x86_64.tar.gz
cd kibana-6.1.1-linux-x86_64
vi config/kibana.yml
server.port: 5601 #开启默认端口5601
server.host: “192.168.91.129” #站点地址
elasticsearch.url: http://192.168.91.129:9200 #指向>elasticsearch服务的ip地址
kibana.index: “.kibana”
bin/kibana
启动成功后访问浏览器访问地址http://192.168.91.129:9200见到如下即表示启动成功
下载文件
进入logstrash下载界面
选择tar进行下载,下载完成后放入/opt/elk下(放置位置个人喜好)
解压文件
进入压缩包所在目录,解压文件。
cd /opt/elk
tar -zxvf ./logstrash-6.1.1.tar.gz
cd /opt/elk/logstash-6.1.1/config/
vi logstrash-test.conf
input {
beats {
port => “5044”}
}
output {
elasticsearch {hosts => “192.168.91.129:9200” } #elasticsearch服务地址
stdout { codec=> rubydebug }
}
bin/logstash -f config/logstash-simple.conf
执行这个语句可能会报错:
[FATAL][logstash.runner] Logstash could not be started because there is already another instance using the configured data directory. If you wish to run multiple instances, you must change the “path.data” setting.
这是因为当前的logstash版本不支持多个instance共享一个path.data,所以需要在启动时,命令行里增加”–path.data PATH “,为不同实例指定不同的路径
bin/logstash -f config/logstash-simple.conf --path.data ./logs/
下载文件
进入filebeat下载界面
选择Liunx-64x包进行下载,下载完成后放入需要检测的服务器上的任一目录下(放置位置个人喜好)
解压文件
进入压缩包所在目录,解压文件。
cd /opt/filebeat
tar -zxvf ./filebeat-6.1.1-linux-x86_64.tar.gz
cd filebeat-6.1.1-linux-x86_64
vi filebeat.yml
paths:
- /opt/logs/filebeat.log #监控的日志文件
————–Elasticsearch output——————-
(全部注释掉)
—————-Logstash output———————
output.logstash:
hosts: [“182.119.137.177:5044”] #你的logstash端口
bin/filebeat -e -c config/filebeat.yml
至此ELK+Filebeat已全部连通,下一部分会写logstash及Elasticsearch的日志优化和处理。
本文主要参考文档:CentOs 7.3下ELK日志分析系统搭建