ELK+filebeat配置及其使用

ELK介绍:

  随着业务发展越来越壮大,服务器的数量越来越多,导致我们运维人员无法很好的去管理日志。

ELK就是由elasticsearch logstash以及kibana组成:

Elasticsearch:个开源分布式搜索引擎,提供搜集、分析、存储数据三大功能。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。详细可参考EC官网(https://www.elastic.co/cn/)

Logstash:主要是用来日志的搜集、分析、过滤日志的工具,支持大量的数据获取方式。一般工作方式为c/s架构,client端安装在需要收集日志的主机上,server端负责将收到的各节点日志进行过滤、修改等操作在一并发往elasticsearch上去。

Kibana:Kibana 也是一个开源和免费的工具,Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助汇总、分析和搜索重要数据日志。

以上是最初的时候的架构模型,随着发展,我们出现了filebeat----轻量级的日志处理工具,它的优点是占用系统资源少,并且适合在各个服务器上面部署收集可以直接传输给ES服务器并且通过kibana进行日志展示,但是他的缺点正是logstash的优点,他无法设置日志的展示格式,看自己的需求进行构建。

Filebeat隶属于beats,beats包含了6种工具。

Packetbeat: 网络数据(收集网络流量数据)

Metricbeat: 指标 (收集系统、进程和文件系统级别的 CPU 和内存使用情况等数据)

Filebeat: 日志文件(收集文件数据)

Winlogbeat: windows事件日志(收集 Windows 事件日志数据)

Auditbeat:审计数据 (收集审计日志)

Heartbeat:运行时间监控 (收集系统运行时的数据)

关于x-pack工具,它提供了安全,警报,监控,报表,图表于一身的扩展包,是收费的,所以我也没装过。

Logstash工作原理:

它处理事件有三个阶段:input  filter  output,是一个接收,处理,转发日志的工具,支持很多种日志:webserver 错误日志,等等

架构原理:

标题

 

 

 

可以看出来源数据到到input,然后filter处理,output输出;当然这里面肯定是有些语法要求的。具体的可参考https://elkguide.elasticsearch.cn/logstash/examples/nginx-access.html太多了 这里我就不写了。

Logstash太耗费cpu  内存等资源了,所以可以通过filebeat来取代它

Filebeat的工作原理:

主要由prospectors(勘测者)和harvesters(收割机)两部分组成:

prospectors(勘测者)主要负责管理harvesters并找到所有读取源;

harvesters(收割机):负责读取单个文件内容,每个文件会启动一个收割机来负责打开或关闭文件,且在运行时文件描述符处于打开状态,所以在收割机关闭之前磁盘不会被释放(即使删除正在被收割机打开的文件,磁盘空间也不会被释放。一会安装完成之后我们来看一下filebeat的配置文件,很简单就能懂。

搭建环境:

Centos7.0两台:

10.10.10.10(搭建es,kibana,以及logstash来演示)

10.10.10.20(搭建filebeat,nginx来演示)

由于是java开发的所以配置java1.8

安装方式我采用的是rpm包,版本是6.5版本。到官网下载即可。

链接:https://www.elastic.co/downloads

10.10.10.10:

1配置jdk1.8

tar -xf jdk-8u191-linux-x64.tar.gz  -C /usr/local/ && mv jdk1.8.****  jdk1.8

vim /etc/profile

export JAVA_HOME=/usr/local/jdk1.8

export CLASSPATH=.:$JAVA_HOME/lib.tools.jar

export PATH=$JAVA_HOME/bin:$PATH

2 配置ES服务:

rpm -ivh elasticsearch-6.5.0.rpm

安装完成后,在/etc/elasticsearch有elasticsearch.yml文件是用来配置集群节点等相关信息的

开始配置集群节点,在10.10.10.10上面配置es配置文件

[root@master-node ~]# vim /etc/elasticsearch/elasticsearch.yml  # 增加或更改以下内容

cluster.name: master-node  # 集群中的名称

node.name: master  # 该节点名称

node.master: true  # 意思是该节点为主节点,若不是主节点写为false

node.data: false  # 表示这不是数据节点,若是数据节点改为true

network.host: 0.0.0.0  # 监听全部ip,在实际环境中应设置为一个安全的ip

http.port: 9200  # es服务的端口号

discovery.zen.ping.unicast.hosts: ["10.10.10.10", "10.10.10.20] # 配置自动发现

如果你的环境中需要搭建集群的请注意红色部分。我这里就两台,所以不需要。

现在可以来启动es服务了。

systemctl start elasticsearch,注意这不会报错但是起不来,可以通过status查看报错信息

在这里很多朋友们会报错,我也用的是虚拟机,以为es要求最低的内存为2G,那我们可以调节一下运行内存。vim /etc/elasticsearch/jvm.options此文件为java的虚拟机的配置文件

在里面修改两个参数-xms -xmx  默认应该是2G,我改为了256m

此时启动发现还会报错,发现它会报找不见java,那我们只能做个软连接了,因为在这里我也不知道是不是bug,因为确实已经配置好了环境变量了。

ln -s /usr/local/jdk1.8/bin/* /usr/local/bin

再次启动就成功了!

ps aux| grep elasticsearch

善用systemctl status elasticsearch以及使tail -f /var/log/messages

netstat -antp | grep java   可以发现9200 9300 端口开启

9300端口是集群通信用的,9200端口则是数据传输时用的。

当查到这些都没有问题的时候我们的es可以算是启动成功了,我们可以查询一下我们的集群状态。

[root@master-node ~]# curl '10.10.10.10/_cluster/health?pretty'

{

  "cluster_name" : "master-node",

  "status" : "green",  # 为green则代表健康没问题,如果是yellow或者red则是集群有问题

  "timed_out" : false,  # 是否有超时

  "number_of_nodes" : 3, # 集群中的节点数量

  "number_of_data_nodes" : 2, # 集群中data节点的数量

  "active_primary_shards" : 0,

  "active_shards" : 0,

  "relocating_shards" : 0,

  "initializing_shards" : 0,

  "unassigned_shards" : 0,

  "delayed_unassigned_shards" : 0,

  "number_of_pending_tasks" : 0,

  "number_of_in_flight_fetch" : 0,

  "task_max_waiting_in_queue_millis" : 0,

  "active_shards_percent_as_number" : 100.0

}

也可以通过浏览器http://10.10.10.10:9200/_cluster/health?pretty来进行查看

检查完毕之后,我们的es就算是搭建好了。

 

第二步我们来搭建kibana,提供一个人性化的web展示框架,是node.js框架写的

10.10.10.10:

我也都下载好了rpm包:

rpm -ivh kibana-6.5.0-x86_64.rpm

安装完成后我们来对kibana来进行配置。

[root@master-node ~]# vim /etc/kibana/kibana.yml  # 增加以下内容

server.port: 5601  # 配置kibana的端口

server.host: 0.0.0.0  # 配置监听ip

elasticsearch.url: "http://10.10.10.10:9200"  # 配置es服务器的ip,如果是集群则配置该集群中主节点的ip

logging.dest: /var/log/kibana.log  # 配置kibana的日志文件路径,不然默认是messages里记录日志

创建kibana的日志文件:

touch /var/log/kibana.log; chmod 777 /var/log/kibana.log

启动kibana服务

systemctl  start kibana

ps aux | grep kibana

netstat -antp | grep 5601

端口为5601,由于是node.js开发的所以进程名字为node

然后就可以通过浏览器访问了

:http://10.10.10.10:5601

是不需要账户和密码就可以登陆的。建议用谷歌登陆啊,因为全是外语。

 

安装logstash:

rpm -ivh logstash-6.5.0.rpm

安装完成后我们不要启动服务,我们先配置logstash收集syslog的日志:

[root@data-node1 ~]# vim /etc/logstash/conf.d/syslog.conf  # 加入如下内容

input {  # 定义日志源

  syslog {

    type => "system-syslog"  # 定义类型

    port => 10514    # 定义监听端口

  }

}

output {  # 定义日志输出

  stdout {

    codec => rubydebug  # 将日志输出到当前的终端上显示

  }

}

检查配置文件是否有错:

[root@data-node1 ~]# cd /usr/share/logstash/bin

[root@data-node1 /usr/share/logstash/bin]# ./logstash --path.settings /etc/logstash/ -f /etc/logstash/conf.d/syslog.conf --config.test_and_exit

Configuration OK  # 为ok则代表配置文件没有问题

命令说明:

--path.settings 用于指定logstash的配置文件所在的目录

-f 指定需要被检测的配置文件的路径

--config.test_and_exit 指定检测完之后就退出,不然就会直接启动了

配置kibana服务器的ip以及配置监听的对象的端口

[root@data-node1 ~]# vim /etc/rsyslog.conf

#### RULES ####

 

*.* @@10.10.10.10:10514

重启rsyslog,让配置生效:systemctl restart rsyslog

接下来我们制定配置文件,启动logstash

[root@data-node1 ~]# cd /usr/share/logstash/bin

[root@data-node1 /usr/share/logstash/bin]# ./logstash --path.settings /etc/logstash/ -f /etc/logstash/conf.d/syslog.conf

# 这时终端会停留在这里,因为我们在配置文件中定义的是将信息输出到当前终端,如果上一步检测执行成功的话这块应该没什么问题,会输出很多信息。

上面只是测试,我们现在来真正配置logstash,让收集的信息输送到es服务,并且通过kibana展示出来。

[root@data-node1 ~]# vim /etc/logstash/conf.d/syslog.conf # 更改为如下内容

input {

  syslog {

    type => "system-syslog"

    port => 10514

  }

}

output {

  elasticsearch {

    hosts => ["192.168.77.128:9200"]  # 定义es服务器的ip

index => "system-syslog-%{+YYYY.MM}" # 定义索引

#这里我们会引申出来一个叫索引的东西,这个我们后面要配合kibana来设置索引进行查看。

现在我们继续检测配置文件有没有错:

[root@data-node1 ~]# cd /usr/share/logstash/bin

[root@data-node1 /usr/share/logstash/bin]# ./logstash --path.settings /etc/logstash/ -f /etc/logstash/conf.d/syslog.conf --config.test_and_exit

Sending Logstash's logs to /var/log/logstash which is now configured via log4j2.properties

Configuration OK

没问题后我们启动服务,并且检查进程以及监听端口

systemctl start logstash

ps aux | grep logstash

netstat -antp | grep 9600

netstat -antp |grep 10514

这里我得说明一下啊,我的这块没有报错,但是如果报错了首先是进程存在,这两个端口没起来;善用日志,去messages找报错信息,这里报错可能是你的权限不够,我就不截图了

chown logstash /var/log/logstash/logstash-plain.log

 chown -R logstash /var/lib/logstash/

这下再启动logstash并且检查端口。

此时我们还得修改一下logstash的yml文件,修改一下监听ip,因为它是本地回环ip无法远程通信。

vim /etc/logstash/logstash.yml

http.host: "0.0.0.0"

重新启动logstash服务并且查看端口,到这里我们的logstash也配置好了。

那我们现在可以登陆上kibana来进行日志的查看咯!

完成了logstash服务器的搭建之后,回到kibana服务器上查看日志,执行以下命令可以获取索引信息:

[root@master-node ~]# curl '10.10.10.10:9200/_cat/indices?v'

health status index                 uuid                   pri rep docs.count docs.deleted store.size pri.store.size

green  open   .kibana               6JfXc0gFSPOWq9gJI1ZX2g   1   1          1            0      6.9kb          3.4kb

green  open   system-syslog-2018.03 bUXmEDskTh6fjGD3JgyHcA   5   1         61            0    591.7kb        296.7kb

如上,可以看到,在logstash配置文件中定义的system-syslog索引成功获取到了,证明配置没问题,logstash与es通信正常。(第二行第三列就是我们再logstash.conf定义的索引)

[root@master-node ~]# curl -XGET '10.10.10.10:9200/system-syslog-2018.03?pretty'

这条命令是来查看详细信息的。

删除索引用:

curl -XDELETE 'localhost:9200/system-syslog-2018.03'

同样的这些都可以同过web界面ip+端口来进行展示。

 

如果上面正常的话我们就可以去配置kibana了,浏览器访问10.10.10.10:5601

我们来创建索引。

用谷歌浏览器来登陆-----左下角管理----kibana标签找索引的字眼----设置索引的名称(必须和的索引通配哦)----选择过滤器(可以选或不选)-----创建-----左上角发现------然后输入自己的设置的索引找到日志就ok了

有时候会发现无法找到日志信息,可能是时间的问题,右上角选择时间。

至此ELK就算是介绍完了,下面我们来介绍filebeat轻量级的收集工具的使用方法

 

之前也介绍过beats是ELK体系中新增的一个工具,它属于一个轻量的日志采集器,以上我们使用的日志采集工具是logstash,但是logstash占用的资源比较大,没有beats轻量,所以官方也推荐使用beats来作为日志采集工具。而且beats可扩展,支持自定义构建

官方:https://www.elastic.co/cn/products/beats

10.10.10.20:

我也是下载好的rpm包

 rpm -ivh filebeat-5.2.0-x86_64.rpm

安装完成后我们来编辑配置文件:

[root@data-node2 ~]# vim /etc/filebeat/filebeat.yml  # 增加或者更改为以下内容

filebeat.prospectors:

- type: log

   #enabled: false 这一句要注释掉

   paths:

      - /var/log/messages  # 指定需要收集的日志文件的路径

 

#output.elasticsearch:  # 先将这几句注释掉

  # Array of hosts to connect to.

#  hosts: ["localhost:9200"]

 

output.console:  # 找个位置添加下面这两句话测试用,指定在终端上输出日志信息

  enable: true

完成后:执行以下命令看看是否终端可以打印日志,若可以则配置成功

[root@data-node2 ~]# /usr/share/filebeat/bin/filebeat -c /etc/filebeat/filebeat.yml

以上配置只是测试filebeat是否能正常收集数据,现在我们再次修改配置文件

[root@data-node2 ~]# vim /etc/filebeat/filebeat.yml

#output.console:  把这两句注释掉

#  enable: true

 

# 把这两句的注释去掉

output.elasticsearch:

  # Array of hosts to connect to.

  hosts: ["10.10.10.10:9200"]  # 并配置es服务器的ip地址

完事后我们启动服务:

[root@data-node2 ~]# systemctl start filebeat

[root@data-node2 ~]# ps axu |grep filebeat

启动成功后,到es服务器上查看索引,可以看到新增了一个以filebeat-6.0.0开头的索引,这就代表filesbeat和es能够正常通信了:

[root@master-node ~]# curl '192.168.77.128:9200/_cat/indices?v'

最后在kibana上按照之前的流程配置索引了,以上这就是如何使用filebeat进行日志的数据收集,可以看到配置起来比logstash要简单,而且占用资源还少。

 

在这里我要说一下,为什么有了filebeat却还要用logstash呢,因为logstash可以设置日志的输出格式,当然如果你为了方便可以直接在客户端配置filebeat,不需要logstash来进行处理了;如果你们日志较多,那这时候就可以配置logstash配合使用。以上只是我个人见解,并且没有什么经验,简单看看。

 

作者:陆游。

猜你喜欢

转载自blog.csdn.net/weixin_43723658/article/details/84327445