elk日志系统搭建

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

Prometheus架构

查看下用户状态

Prometheus架构

Prometheus架构

切换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

报错:

Prometheus架构

ERROR: [1] bootstrap checks failed
[1]: max file descriptors [65535] for elasticsearch process is too low, increase to at least [65536]

说的意思是最大文件数至少应该在65536

查询终端的最大句柄数:

Prometheus架构

发现确实有限制

解决办法:
修改linux的软硬件限制文件/etc/security/limits.conf
在文件尾部添加如下代码:

* soft nofile 131072
* hard nofile 131072

*代表所有的用户,而这里我们只修改es用户

Prometheus架构

查看下,改的生效了:

Prometheus架构

再次启动下,就可以了,成功

Prometheus架构

以上是部署了elasticsearch单机,接下来部署集群模式:

配置文件

Prometheus架构

Prometheus架构

分享别人的配置文件:

#集群的名称
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

其他机器也同样去做,另外两台机器报错:

Prometheus架构

[root@cty-kftest10 elasticsearch-6.6.1]# vim /etc/sysctl.conf 

加入:

vm.max_map_count=262144

Prometheus架构

验证下:

Prometheus架构

输入: curl -XGET ‘http://172.29.4.103:9200/_cat?pretty‘ 来验证部署成功

安装logstash:

解压安装包:logstash

首先安装shipper,编辑一个shipper的文件

Prometheus架构

后台启动 :

nohup ./bin/logstash -f config/shipper.conf &

验证下:成功

Prometheus架构

Prometheus架构

安装kinaba:

vim config/kibana.yml

修改配置文件:

server.port: 5601

启动即可

需要在页面里配置下

在Management中Create index pattern 添加logstash-*,可以访问到