集中式日志系统 ELK

概述ELK套件(ELK stack)是指ElasticSearch、Logstash和Kibana三件套。这三个软件可以组成一套日志分析和监控工具。
一个完整的集中式日志系统,主要有以后几个特点:✔ 收集-能够采集多种来源的日志数据✔ 传输-能够稳定的把日志数据传输到中央系统✔ 存储-如何存储日志数据✔ 分析-可以支持 UI 分析✔ 警告-能够提供错误报告,监控机制
目前主流开源的日志分析和监控工具主要有:FackBook的Scribe, Cloudera的Fluentd,Linkedin的Kafak,Apache的Chukwa和ELK等;商业化的产品主要有:Splunk等。
本文主要详细描述一下ELK的原理和具体配置。
ELK的全称:Elasticsearch,Logstash,Kibana,属于Elastic.co公司。
下面分别详解描述一下ELK。
ElasticsearchElasticsearch 是一个实时分布式搜索和分析引擎,可以用于全文搜索,结构化搜索以及分析等。它是一个建立在全文搜索引擎 Apache Lucene 基础上的搜索引擎,使用 Java 语言编写。
主要特点:✔ 实时分析✔ 分布式实时文件存储,并将每一个字段都编入索引✔ 文档导向,所有的对象全部是文档✔ 高可用性,易扩展,支持集群(Cluster)、分片和复制(Shards 和 Replicas)。✔ 接口友好,支持      JSON
关于Elasticsearch的几个要术语及解释:
cluster 
代表一个集群,集群中有多个节点,其中有一个为主节点,这个主节点是可以通过选举产生 的,主从节点是对于集群内部来说的。es的一个概念就是去中心化,字面上理解就是无中心节点,这是对于集群外部来说的,因为从外部来看es集群,在逻辑上 是个整体,你与任何一个节点的通信和与整个es集群通信是等价的。 

shards 
代表索引分片,es可以把一个完整的索引分成多个分片,这样的好处是可以把一个大的索引拆分成多个,分布到不同的节点上。构成分布式搜索。分片的数量只能在索引创建前指定,并且索引创建后不能更改。 

replicas 
代表索引副本,es可以设置多个索引的副本,副本的作用一是提高系统的容错性,当个某个节点某个分片损坏或丢失时可以从副本中恢复。二是提高es的查询效率,es会自动对搜索请求进行负载均衡。 

recovery 
代表数据恢复或叫数据重新分布,es在有节点加入或退出时会根据机器的负载对索引分片进行重新分配,挂掉的节点重新启动时也会进行数据恢复。 

river 
代 表es的一个数据源,也是其它存储方式(如:数据库)同步数据到es的一个方法。它是以插件方式存在的一个es服务,通过读取river中的数据并把它索 引到es中,官方的river有couchDB的,RabbitMQ的,Twitter的,Wikipedia的,river这个功能将会在后面的文件中 重点说到。 

gateway 
代表es索引的持久化存储方式,es默认是先把索引 存放到内存中,当内存满了时再持久化到硬盘。当这个es集群关闭再重新启动时就会从gateway中读取索引数据。es支持多种类型的gateway,有 本地文件系统(默认),分布式文件系统,Hadoop的HDFS和amazon的s3云存储服务。 

discovery.zen 
代表es的自动发现节点机制,es是一个基于p2p的系统,它先通过广播寻找存在的节点,再通过多播协议来进行节点之间的通信,同时也支持点对点的交互。 

Transport 
代表es内部节点或集群与客户端的交互方式,默认内部是使用tcp协议进行交互,同时它支持http协议(json格式)、thrift、servlet、memcached、zeroMQ等的传输协议(通过插件方式集成)。
LogstashLogstash是一款轻量级的日志搜集处理框架,可以方便的把分散的、多样化的日志搜集起来,并进行自定义的处理,然后传输到指定的位置,比如某个服务器或者文件。使用 JRuby 语言编写。
主要特点:✔ 几乎可以访问任何数据✔ 可以和多种外部应用结合✔ 支持弹性扩展
它由三个主要部分组成: ✔ Shipper-发送日志数据✔ Broker-收集数据,缺省内置 Redis✔ Indexer-数据写入

KibanaKibana 是一款基于 Apache 开源协议,使用 JavaScript 语言编写,为 Elasticsearch 提供分析和可视化的 Web 平台。它可以在 Elasticsearch 的索引中查找,交互数据,并生成各种维度的表图。
下图是 Kibana官网上的流程图。

ELK 安装及配置实验系统架构:
下面具体描述一下ELK的安装配置,本文的采用的操作系统全部是Centos7.2 x86_64。
本文使用了 Nginx 的反向代理,使得用户可以从外部访问到 Kibana,并且它本身具有负载均衡的作用,也能够提高性能。这里还提一下Logstash-forwarder,这是一款使用 Go 语言编写的日志传输工具。由于 Logstash 是使用 Java 来运行,为了提升网络传输效率,我们并不在客户系统上面使用 Logstash 来传输数据。这款软件就是原来的 Lumberjack,今后慢慢将被 Elastic.co 公司的另外一款产品 Beat 吸收合并到 Filebeat 中,这里不在详述。 -------------------- Elasticsearch--------------------1- 安装Java环境               # yum install java-1.8.0-openjdk java-1.8.0-openjdk-devel java-1.8.0-openjdk-headless 2- 安装Elasticsearch          # rpm --import http://packages.elastic.co/GPG-KEY-elasticsearch          # vim /etc/yum.repos.d/elasticsearch.repo               [elasticsearch-2.1] name=Elasticsearch repository for 2.x packages baseurl=http://packages.elastic.co/elasticsearch/2.x/centos gpgcheck=1 gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch enabled=1          # yum install elasticsearch -y 3- 配置文件 显示访问范围,修改 bind 参数为本机访问          # vim /etc/elasticsearch/elasticsearch.yml               network.host: localhost 4- 启动服务          # systemctl enable elasticsearch.service        # systemctl start elasticsearch.service
------------ Kibana------------ 1- 安装          # wget https://download.elastic.co/kibana/kibana/kibana-4.3.0-linux-x64.tar.gz          # tar xvf kibana-4.3.0-linux-x64.tar.gz -c /usr/local/        # cd /usr/local        # mv kibana-4.3.0-linux-x64 kibana 2- 创建启动服务          # cd /etc/systemd/system/          # vim kibana.service               [Service] ExecStart=/usr/local/kibana/bin/kibana [Install] WantedBy=multi-user.target 3- 修改配置文件,将bind改为本机,外部访问后面设置Nginx处理          # vim /usr/local/kibana/config/kibana.yml               server.host: "localhost" 4- 启动服务               # systemctl enable kibana.service        # systemctl start kibana.service
----------- Nginx----------- 1- 安装          # yum install nginx httpd-tools -y 2- 创建web访问用户kibanaadmin          # htpasswd -c /etc/nginx/htpasswd.users kibanaadmin 3- 修改配置文件,将server{} 块注释掉          # vim /etc/nginx/nginx.conf               #    server { #        listen       80 default_server; #        listen       [::]:80 default_server; #        server_name  _; #        root         /usr/share/nginx/html; # #        # Load configuration files for the default server block. #        include /etc/nginx/default.d/*.conf; # #        location / { #        } # #        error_page 404 /404.html; #            location = /40x.html { #        } # #        error_page 500 502 503 504 /50x.html; #            location = /50x.html { #        } #    } 4- 创建配置文件          # vim /etc/nginx/conf.d/kibana.conf server { listen 80; server_name ziyan.l-elk-01; auth_basic "Restricted Access"; auth_basic_user_file /etc/nginx/htpasswd.users;              location / { proxy_pass http://localhost:5601; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade;    } } 5- 启动Nginx          # systemctl enable nginx        # systemctl enable nginx.service 访问网页,验证用户名为刚刚设置的 kibanaadmin。 PS: 等客户端也装好以后,在此初始化选择 @timestamp。
--------------- Logstash---------------  1- 安装          # vim /etc/yum.repos.d/logstash.repo               [logstash-2.1] name=logstash repository for 2.1 packages baseurl=http://packages.elasticsearch.org/logstash/2.1/centos gpgcheck=1 gpgkey=http://packages.elasticsearch.org/GPG-KEY-elasticsearch enabled=1               # yum install logstash -y 2- 生成SSL证书 客户端的日志由Filebeat收集到ELK服务器,需要创建SSL证书及密钥对。Filebeat通过SSL证书验证ELK服务器身份。 法1:通过IP地址          # vim /etc/pki/tls/openssl.cnf               [ v3_ca ] subjectAltName = IP: 192.168.121.31          # cd /etc/pki/tls          # openssl req -config /etc/pki/tls/openssl.cnf \ > -x509 -days 3650 -batch -nodes -newkey rsa:2048 \ > -keyout private/logstash-forwarder.key -out certs/logstash-forwarder.crt 稍后将 logstash-forwarder.crt 拷贝到各个日志收集节点。 法2:通过主机名 [ 需要DNS或改好hosts ]  # cd /etc/pki/tls # sudo openssl req -subj '/CN=ziyan.l-elk-01/' -x509 \ > -days 3650 -batch -nodes -newkey rsa:2048 \ > -keyout private/logstash-forwarder.key -out certs/logstash-forwarder.crt 3- 配置Logstash Logstash配置文件使用JSON格式,路径为 /etc/logstash/conf.d/
包含 inputs | filters | outputs 三部分       # vim /etc/logstash/conf.d/02-filebeat-input.conf input {   beats { port => 5044     type => "logs"     ssl => true     ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt"     ssl_key => "/etc/pki/tls/private/logstash-forwarder.key"   } }   # vim /etc/logstash/conf.d/10-syslog.conf 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" ]     }   } } 将日志存储到Elasticsearch [ 跑在本机9200端口 ]
# vim /etc/logstash/conf.d/30-elasticsearch-output.conf output {   elasticsearch { hosts => ["localhost:9200"] }   stdout { codec => rubydebug } } 验证配置文件          # service logstash configtest Configuration OK 4- 启动Logstash          * # chmod 777 /var/log/logstash/logstash.log          # chkconfig logstash on        # systemctl start logstash  
|| CLIENT 客户端收集本地日志,通过Filebeat汇总到ELK服务器上
------------- Filebeat-------------  0- 拷贝ELK节点上的证书logstash-forwarder.crt 到客户端          [root@ELKSERVER ~]# scp /etc/pki/tls/certs/logstash-forwarder.crt Client-01:/tmp 1- 安装          # rpm --import http://packages.elastic.co/GPG-KEY-elasticsearch          # vim /etc/yum.repos.d/elastic-beats.repo               [beats] name=Elastic Beats Repository baseurl=https://packages.elastic.co/beats/yum/el/$basearch enabled=1 gpgkey=https://packages.elastic.co/GPG-KEY-elasticsearch gpgcheck=1          # yum install filebeat 2- 保存SSL证书到对应路径          # cp /tmp/logstash-forwarder.crt /etc/pki/tls/certs/ 3- 修改配置文件          # vim /etc/filebeat/filebeat.yml        ...               paths:         - /var/log/auth.log         - /var/log/syslog           #  - /var/log/*.log        ...          ...               document_type: syslog        ...          ...        output:          ### Elasticsearch as output          elasticsearch:            enabled: false        ...          ...          ### Logstash as output          logstash:         # The Logstash hosts         hosts: ["ziyan.l-elk-01:5044"]      注:此处为ELK Server Hostname        ...          ...        tls:       # List of root certificates for HTTPS server verifications       #certificate_authorities: ["/etc/pki/root/ca.pem"]       certificate_authorities: ["/etc/pki/tls/certs/logstash-forwarder.crt"]        ... 4- 启动服务          # chkconfig filebeat on
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值