elk介绍:
elasticsearch+logstash+kibana作为业界主流的日志存储分析平台,是相当成熟的解决方案。logstash作为日志采集、处理工具,elasticsearch作为日志存储分析工具,kibana作为日志展示工具。对这套很多也进行优化,比如logstash比较消耗资源,用相对轻量的日志采集工具来替代,还有使用redis、kafka等缓存技术,解决logstash无缓存的功能。做到高可用和分布式的架构,很多使用logstash shipper(只做采集使用,不消耗目标节点上面运行的资源)+kafka(作为消息中间件,缓存使用)+logstash indexer(统一的消息收集、处理、创建索引,通畅单独部署)+elasticsearch集群+kibana。我这回部署的是基本的logstash shipper+elasticsearch+kibana。
elk部署:
搭建集群准备(5台CenterOS 7.2的机器):
- 102:elasticsearch
- 103:elasticsearch
- 105:elasticsearch
- 45:logstash shipper
- 86:kibana
首先安装elasticsearch:
修改配置文件:
vim config/elasticsearch.yml
主要修改了2点:
# ---------------------------------- Network -----------------------------------
#
# Set the bind address to a specific IP (IPv4 or IPv6):
#
network.host: 0.0.0.0 ##服务器ip 本机
#
# Set a custom port for HTTP:
#
http.port: 9200 ##服务端口
#
# For more information, consult the network module documentation.
#
启动之后报错:
java.lang.RuntimeException: can not run elasticsearch as root
是因为elasticsearch有用户输入的执行文件,所以为了安全考虑不让使用root账户,不过可以通过修改elasticsearch允许root运行,不过不推荐这种办法,建议创建用户
创建elsearch用户组及elsearch用户
[root@cty-kftest08 /usr]$ groupadd elasticsearch
[root@cty-kftest08 /usr]$ useradd es -g elasticsearch
[root@cty-kftest08 /usr]$ passwd es (设置的!QAZ2wsx)
更改elasticsearch文件夹及内部文件的所属用户及组为es:elasticsearch
[root@cty-kftest08 /usr]$ chown -R es:elasticsearch elasticsearch-6.6.1
查看下用户状态
切换es用户启动:
[root@cty-kftest08 /usr]$ su es
[es@cty-kftest08 /usr]$ cd elasticsearch-6.6.1/bin/
[es@cty-kftest08 /usr/elasticsearch-6.6.1/bin]$ ./elasticsearch
报错:
ERROR: [1] bootstrap checks failed
[1]: max file descriptors [65535] for elasticsearch process is too low, increase to at least [65536]
说的意思是最大文件数至少应该在65536
查询终端的最大句柄数:
发现确实有限制
解决办法:
修改linux的软硬件限制文件/etc/security/limits.conf
在文件尾部添加如下代码:
* soft nofile 131072
* hard nofile 131072
*代表所有的用户,而这里我们只修改es用户
查看下,改的生效了:
再次启动下,就可以了,成功
以上是部署了elasticsearch单机,接下来部署集群模式:
配置文件
分享别人的配置文件:
#集群的名称
cluster.name: es6.2
#节点名称,其余两个节点分别为node-2 和node-3
node.name: node-1
#指定该节点是否有资格被选举成为master节点,默认是true,es是默认集群中的第一台机器为master,如果这台机挂了就会重新选举master
node.master: true
#允许该节点存储数据(默认开启)
node.data: true
#索引数据的存储路径
path.data: /usr/local/elk/elasticsearch/data
#日志文件的存储路径
path.logs: /usr/local/elk/elasticsearch/logs
#设置为true来锁住内存。因为内存交换到磁盘对服务器性能来说是致命的,当jvm开始swapping时es的效率会降低,所以要保证它不swap
bootstrap.memory_lock: true
#绑定的ip地址
network.host: 0.0.0.0
#设置对外服务的http端口,默认为9200
http.por。、放在括号内。默认为127.0.0.1, [::1]
discovery.zen.ping.unicast.hosts: ["192.168.8.101:9300", "192.168.8.103:9300", "192.168.8.104:9300"]
#如果没有这种设置,遭受网络故障的集群就有可能将集群分成两个独立的集群 - 分裂的大脑 - 这将导致数据丢失
discovery.zen.minimum_master_nodes: 2
其他机器也同样去做,另外两台机器报错:
[root@cty-kftest10 elasticsearch-6.6.1]# vim /etc/sysctl.conf
加入:
vm.max_map_count=262144
验证下:
输入: curl -XGET ‘http://172.29.4.103:9200/_cat?pretty‘ 来验证部署成功
安装logstash:
解压安装包:logstash
首先安装shipper,编辑一个shipper的文件
后台启动 :
nohup ./bin/logstash -f config/shipper.conf &
验证下:成功
安装kinaba:
vim config/kibana.yml
修改配置文件:
server.port: 5601
启动即可
需要在页面里配置下
在Management中Create index pattern 添加logstash-*,可以访问到