记录日志系统ELKB 5.6.4的搭建过程

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了记录日志系统ELKB 5.6.4的搭建过程相关的知识,希望对你有一定的参考价值。

前言

ELK是最近比较流行的免费的日志系统解决方案,注意,ELK不是一个软件名,而是一个结局方案的缩写,即Elasticsearch+Logstash+Kibana(ELK Stack),其中Logstash负责日志的采集和过滤,Elasticsearch负责日志的存储,Kibana是一个前端页面,可以使使用者在web界面去查看情况而且可以配置监控功能。这哥几个都是java系的产品,但是众所周知,java的东西很吃内存和CPU,Logstash在当作为收集日志的Agent时,显得太臃肿了。听说直播平台“斗鱼”团队很为logstash占用资源的情况很而苦恼,后来为了解决这个问题,他们自己写了一个agent。不过后来官方在logstash-forwarder的基础上推出了beat系列,里面包括四个兄弟,分别是:Packetbeat(搜集网络流量数据);Topbeat(搜集系统、进程和文件系统级别的 CPU 和内存使用情况等数据);Filebeat(搜集文件数据);Winlogbeat(搜集 Windows 事件日志数据)。而Filebeat也就这样加入了“日志收集分析”的团队里,所以虽然大家还是习惯性的叫ELK,其实准确的说法已经是ELKB了。


ELKB这几个哥们的分工如下:

  1. Elasticsearch:分布式搜索和分析引擎,具有高可伸缩、高可靠和易管理等特点。基于 Apache Lucene 构建,能对大容量的数据进行接近实时的存储、搜索和分析操作。通常被用作某些应用的基础搜索引擎,使其具有复杂的搜索功能;

  2. Logstash:数据收集额外处理和数据引擎。它支持动态的从各种数据源搜集数据,并对数据进行过滤、分析、丰富、统一格式等操作,然后存储到用户指定的位置;

  3. Kibana:数据分析和可视化平台。通常与 Elasticsearch 配合使用,对其中数据进行搜索、分析和以统计图表的方式展示;

  4. Filebeat:ELK 协议栈的新成员,在需要采集日志数据的 server 上安装 Filebeat,并指定日志目录或日志文件后,Filebeat 就能读取数据,迅速发送到 Logstash 进行解析,亦或直接发送到 Elasticsearch 进行集中式存储和分析。


设计架构

技术分享图片

本文的设计结构就是这样,其中红色的redis/RebbitMQ部分可以省略(我这个例子里暂省略),让日志直接传递到logstash,如果日志量较大,最好还是添加上redis,同时再横向扩容Elasticsearch,搞成一个集群。


对于这几个模块服务器多说几句:

1)Logstash要选择计算能力强的,CPU和内存比较丰满的;

2)Elasticsearch要选择磁盘容量大的,同时CPU和内存也比较丰满的;


实验软件版本

Elasticsearch 5.6.4  

Logstash 5.6.4 

Kibana 5.6.4 下载地址:

curl -L -O https://artifacts.elastic.co/downloads/kibana/kibana-5.6.4-linux-x86_64.tar.gz

Filebeat 5.6.4 下载地址:

curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-5.6.4-x86_64.rpm

Java 1.8+,安装方法:http://blog.51cto.com/chenx1242/2043924


由于ELKB这几个东西都是墙外的,墙内的下载可能会比较费劲。所以我稍后会把所有ELKB的5.6.4程序都放在51CTO的存储空间里,需要的朋友可以去下载,还是那话,虽然ELK升级频率很快,但是5.6.4已经足够稳定了。


实验服务器情况

服务器名称服务器IP服务器情况服务器用途
func-auc-001 10.117.32.243阿里云Centos 6.5 2核2G
这个auc是我公司的一个内部java模块,会产生日志。将filebeat安装在这个机器上;
chen-logstash-00110.162.80.171阿里云Centos 7.4 2核4G(JAVA1.8.0)Logstash
chen-elk-00110.162.80.192阿里云Centos 7.4 2核8G(JAVA1.8.0)Elasticsearch+Kibana
nginx直接使用阿里云负载均衡取代


安装Elasticsearch 5.6.4(以下所有操作都是root下进行的)

curl -L -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.6.4.rpm
rpm -ivh elasticsearch-5.6.4.rpm


然后编辑/etc/elasticsearch/elasticsearch.yml,不然的话logstash无法与之相连:

network.host: 0.0.0.0    #取消注释,并且改成0.0.0.0
http.port: 9200    #取消注释


保存之后,启动并且添加开机启动:

systemctl start elasticsearch     
systemctl enable elasticsearch

技术分享图片


安装Logstash 5.6.4(以下所有操作都是root下进行的)

curl -L -O https://artifacts.elastic.co/downloads/logstash/logstash-5.6.4.rpm 
rpm -ivh logstash-5.6.4.rpm

如果安装的时候爆错:/usr/share/logstash/vendor/jruby/bin/jruby: line 388: /usr/bin/java: No such file or directory。那么就先#which java查看一下java的文件,然后做一个软连接过去,然后重装logstash即可,如图:

技术分享图片

技术分享图片


用户可以使用 TLS 双向认证加密 Filebeat 和 Logstash 的连接,保证 Filebeat 只向可信的 Logstash 发送加密的数据。同样的,Logstash 也只接收可信的 Filebeat 发送的数据。这个功能默认是关闭的,要开启的话需要先#vim /etc/pki/tls/openssl.cnf,如图:

技术分享图片


找到[ v3_ca ]的字段,在底下添加“subjectAltName = IP:logstash的内网IP”字段,保存退出来到/etc/pki/tls/,执行

openssl req -x509 -days 365 -batch -nodes -newkey rsa:2048 -keyout private/logstash-forwarder.key -out certs/logstash-forwarder.crt

来生成一个期限为365天的IP SAN证书对,如图:

技术分享图片


安装完毕之后,#vim /etc/logstash/logstash.yml,编辑成如下的样子:

技术分享图片


然后在/etc/logstash/下手动建立一个目录conf.d,在conf.d里新建一个logstash.conf的文件,如下:

$ cat /usr/local/logstash/config/conf.d/logstash.conf
#在输入部分,配置Logstash通信端口以及添加SSL证书,从而进行安全通信。
input {
 beats {
   port => 5044
   ssl => true
   ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt"
   ssl_key => "/etc/pki/tls/private/logstash-forwarder.key"
  }
}

#在过滤器部分,我们将使用Grok来解析这些日志,然后将其发送到Elasticsearch。以下grok过滤器将查找“syslog”标记的日志,并尝试解析它们,以生成结构化索引。
filter {
  if [type] == "syslog" {
    grok {
      match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" }
      add_field => [ "received_at", "%{@timestamp}" ]
      add_field => [ "received_from", "%{host}" ]
    }
    syslog_pri { }
    date {
      match => [ "syslog_timestamp", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
    }
  }
}

#输出部分,我们将定义要存储的日志位置
output {
 elasticsearch {
  hosts => [ "10.162.80.192:9200" ]                #这个地址是elasticsearch的内网地址
    index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}"
 user => elastic
 password => changeme
       }
stdout {
    codec => rubydebug
       }
}


然后就是启动并且添加开机自启动

systemctl start logstash        
systemctl enable logstash













参考资料:https://www.ibm.com/developerworks/cn/opensource/os-cn-elk-filebeat/index.html 

参考资料:https://www.ibm.com/developerworks/cn/opensource/os-cn-elk/

参考资料:http://www.jinsk.vip/2017/05/24/elksetup/

参考资料:https://renwole.com/archives/661

参考资料:https://www.zybuluo.com/dume2007/note/665868 

参考资料:https://www.elastic.co/guide/en/beats/libbeat/5.6/getting-started.html 

参考资料:https://discuss.elastic.co/search?q=ERR%20Failed%20to%20publish%20events%20caused%20by%3A%20read%20tcp 

参考资料:http://jaminzhang.github.io/elk/ELK-config-and-use-Filebeat/ (这个博主很好,但是就是博客无法留言,这点比较坑)


以上是关于记录日志系统ELKB 5.6.4的搭建过程的主要内容,如果未能解决你的问题,请参考以下文章

Linux | ELK 8.2搭建ELKB集群Ⅰ—— 实验环境说明和搭建Elasticsearch集群

记录一下Elasticsearch+Filebeat+Kibana搭建过程(单节点)

ELKB是什么?

yum搭建ELFK日志采集系统

Docker手动搭建sentry错误日志系统

SeasLog高性能php日志系统