Elastic stack 6.x安装配置

最近趁着业务重构,正好把日志收集系统也重构一下,之前用的版本还是es2.x的版本,实在太老了。最近看了看最新官方文档,发现好多新功能非常的实用,升级一波。

安装

首先在官网下载安装包,我下的是最新版本,官网上有各个历史版本的下载,随心下。

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.2.4.tar.gz
wget https://artifacts.elastic.co/downloads/kibana/kibana-6.2.4-linux-x86_64.tar.gz
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.2.4-linux-x86_64.tar.gz
wget https://artifacts.elastic.co/downloads/logstash/logstash-6.2.4.tar.gz

系统配置

在这次安装里,我用了三台虚拟机,centOS6.5。当时7的镜像没准备好,其实感觉用7会更好一些。系统的配置主要是JDK配置、最大openfile数的配置等,并不复杂。

JDK:
    export JAVA_HOME=~/elk/jdk1.8.0_74
    export JRE_HOME=~/elk/jdk1.8.0_74/jre
    export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
    export PATH=$JAVA_HOME/bin:$PATH

system_config:
    vi /etc/sysctl.conf
    vm.max_map_count = 655360

    sysctl -p

    vi /etc/security/limits.conf
    * soft nofile 65536
    * hard nofile 131072
    * soft nproc 65536
    * hard nproc 131072

接下来把下载好的安装包解压就好了,放在一个文件夹下,比较方便,比如~/elk。

配置

现在elastic stack的安装已经非常简便了,解压出来就好,配置上需要调整的地方也不多,看具体需求调整就好。

elasticsearch配置:

cluster.name: clusterName #es集群名
node.name: nodeName #es节点名,每个节点名字不同
path.data: ~/elk/data #es数据存放位置
path.logs: ~/elk/logs #es日志位置
bootstrap.memory_lock: false #这两个部分与系统有关,centos6需要设为false
bootstrap.system_call_filter: false
network.host: 0.0.0.0 #监听地址
http.port: 9288 #监听端口
discovery.zen.ping.unicast.hosts: ["es1_ip", "es2_ip", "es3_ip"] #把同一集群的所有节点的ip列在这里
discovery.zen.minimum_master_nodes: 2 #防脑裂的,设置成(nodeNumber+1)/2

上面的这段配置是elasticsearch的配置。es是整套系统的核心组件,我用了三个节点的集群,健壮性得到了一定的保证。

具体到这次的配置,修改的部分不多,具体含义写在注释中了。除了这些配置外还可以配置比如es连接密码等,进一步提高安全性。

logstash的配置我没有修改,直接使用默认配置即可。

kibana配置:

server.port: 5601 #kibana监听端口,默认5600
server.host: "server_ip" #kibana的ip
server.name: "server_name"
elasticsearch.url: "http://localhost:9288" #es的连接地址
kibana.index: ".kibana" #kibana默认index

关于kibana监听的ip地址,如果想直接ip:port就可以访问到,就配置成机器的外网ip;否则就设置成localhost,前面再加个nginx,这样的安全性会比较好,还可以通过nginx设置一个简单的权限验证,确保不是所有人都能够看到日志,毕竟有些日志也会涉及到一些敏感信息。

5.0版本以后的elastic stack引入了filebeat这一工具,这个组件代替了之前logstash收集日志的角色,使得logstash只专注于indexer的工作。而且filebeat在收集日志方面的可靠性和效率也比logstash高很多。之前的系统logstash收集者经常挂掉,导致日志收集不及时,数据也乱,还得专门写一个监控脚本来处理这个问题,filebeat目前我还没有发现有这个问题,运行比较稳定。

filebeat配置:

filebeat.prospectors:
- type: log
  enabled: false
  paths:
    - /var/log/*.log
- type: log
  enabled: true
  paths:
    - ~/nginx/logs/access.log
  tags: ["webnginx"]
filebeat.config.modules:
  path: ${path.config}/modules.d/*.yml
  reload.enabled: false
setup.template.settings:
  index.number_of_shards: 3
setup.kibana:
output.logstash:
  hosts: ["logstash.indexer_ip:port"]

在之前2.x的时代,配置中最复杂的就是logstash收集、处理日志的部分;现在也差不多,只不过收集部分变成了filebeat。

filebeat的配置文件最重要的就是prospectors这个部分,这个部分下每一个-tpye下面的一段就是一个prospector,也就是收集者;一个配置文件中可以有若干个收集者。比如我上面的配置文件中配置了两个prospector,第一个是默认自带的,可以看到是收集/var/log文件夹下所有.log文件,只不过enabled项目设置成了false,也就是说并未启用。第二个prospector是我用来收集nginx日志的,可以给这条配置加上tag,这样在es中可以根据tag来筛选日志。

output部分可以输出到很多地方,可以直接输出到es中,也可以像上面那样输出到logstash.indexer中,还可以直接输出到标准输出,视需求而定。

另外,es、logstash、kibana三个组件的配置文件夹中都有jvm.options配置文件,可以配置jvm启动参数,比如扩大jvm内存等。之前2.x版本时修改es的jvm启动参数还需要修改启动脚本,现在方便了很多。

启动

四个组件的启动方式都比较简单,首先启动elasticsearch,核心组件当然要第一个启动:

~/elasticsearch/bin/elasticserach -d 

之后启动logstash(indexer):

nohup ~/logstash/bin/logstash -f logstash-indexer.conf &​

接下来启动filebeat:

nohup ./filebeat -c filebeat.yml > /dev/null 2>&1 &

最后启动kibana:

~/kibana/bin/kibana serve -p 5601 &​

kibana6.x版本应该是用node.js开发的,启动后是一个node进程,如果ps -ef|grep kibana是查不到kibana的进程的,如果要kill就搜索node。这个部分回头要是找到更好的重启方法再改吧。

至此elastic stack所有组件都启动完成了,确认下启动过程中没有报错,所有服务都在正常运行,就可以到浏览器中访问kibana,看下是否有收集到的日志了。

新版的kibana界面比原来好看很多,而且配合filebeat,功能也更完善了。好评!

上图的字段是经过logstash处理后拆分出来的字段,否则所有信息都在_source字段中,看起来不是很方便,下一篇文章我会写一下filebeat和logstash对于日志信息流的拆分处理。

发表评论

您的电子邮箱地址不会被公开。