ELK+Filebeat集中式日志解决方案(centos7)
2017-11-11 15:57
666 查看
一.ELK Stack 概述
ELK是一组开源软件的简称,其包括Elasticsearch、Logstash 和 Kibana。ELK最近几年发展迅速,已经成为目前最流行的集中式日志解决方案。
Elasticsearch: 能对大容量的数据进行接近实时的存储,搜索和分析操作。 本项目中主要通过Elasticsearch存储所有获取的日志。
Logstash: 数据收集引擎,它支持动态的的从各种数据源获取数据,并对数据进行过滤,分析,丰富,统一格式等操作,然后存储到用户指定的位置。
Kibana: 数据分析与可视化平台,对Elasticsearch存储的数据进行可视化分析,通过表格的形式展现出来。
Filebeat: 轻量级的开源日志文件数据搜集器。通常在需要采集数据的客户端安装Filebeat,并指定目录与日志格式,Filebeat就能快速收集数据,并发送给logstash进行解析,或是直接发给Elasticsearch存储。
二.ELK常用的架构
1. 基础结构
单一的架构,logstash作为日志搜集器,从数据源采集数据,并对数据进行过滤,格式化处理,然后交由Elasticsearch存储,kibana对日志进行可视化处理。
2.多节点部署Logstash架构
这种架构模式适合需要采集日志的客户端不多,且各服务端cpu,内存等资源充足的情况下。因为每个节点都安装Logstash, 非常消耗节点资源。其中,logstash作为日志搜集器,将每一台节点的数据发送到Elasticsearch上进行存储,再由kibana进行可视化分析。
3.多节点部署Filebeats架构
Filebeats是一种轻量级的日志搜集器,其不占用系统资源,自出现之后,迅速更新了原有的elk架构。Filebeats将收集到的数据发送给Logstash解析过滤,在Filebeats与Logstash传输数据的过程中,为了安全性,可以通过ssl认证来加强安全性。之后将其发送到Elasticsearch存储,并由kibana可视化分析。
三.多节点部署Filebeats架构详解
1. centos系统上安装java8
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html ##下载java8rpm包上传到服务器 yum -y localinstall jdk-8u73-linux-x64.rpm
2.安装 Elasticsearch
rpm --import http://packages.elastic.co/GPG-KEY-elasticsearch ##从官网导入gpgkey vim /etc/yum.repos.d/elasticsearch.repo echo '[elasticsearch-2.x] 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 -y install elasticsearch ##YUM安装Elasticsearch
vi /etc/elasticsearch/elasticsearch.yml network.host: localhost #修改为仅本地接触到9200端口 注:为了安全起见,只允许本地访问9200端口。防止外部通过http api恶意操作9200端口。
systemctl start elasticsearch systemctl enable elasticsearch
3. 安装Kibana
Kibana的rpm包与Elasticsearch共用一个GPG Key,因此不用再重新下载 gpg key.vi /etc/yum.repos.d/kibana.repo [kibana-4.4] name=Kibana repository for 4.4.x packages baseurl=http://packages.elastic.co/kibana/4.4/centos gpgcheck=1 gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch enabled=1
yum -y install kibana
vi /opt/kibana/config/kibana.yml server.host: "localhost" 注:同样为了安全起见,只将本地访问
systemctl start kibana chkconfig kibana on
因为我们设置让Kibana倾听本地端口,但我们必须要让外部访问到。我们需要安装nginx,并且配置反向代理。
yum -y install nginx httpd-tools htpasswd -c /etc/nginx/htpasswd.users kibanaadmin 注:此举为访问Kibana设置密码。
vi /etc/nginx/nginx.conf ##注释原有80端口
vi /etc/nginx/conf.d/kibana.conf ##创建kibana的nginx配置文件 server { listen 80; server_name IP或者是域名; auth_basic "Restricted Access"; auth_basic_user_file /etc/nginx/htpasswd.users; location / { proxy_pass http://localhost:5601; ##当外部访问80时,反向代理到本地5601端口,使其访问kibanan 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; } }
systemctl start nginx systemctl enable nginx
注:配置nginx后要确保selinux处于disabled状态,或者是执行:
setsebool -P httpd_can_network_connect 1
使selinux信任http
4.安装Logstash
(1) 安装Logstashvi /etc/yum.repos.d/logstash.repo [logstash-2.2] name=logstash repository for 2.2 packages baseurl=http://packages.elasticsearch.org/logstash/2.2/centos gpgcheck=1 gpgkey=http://packages.elasticsearch.org/GPG-KEY-elasticsearch enabled=1
yum -y install logstash
(2)生成 SSL Certificates
A: 使用ip地址生成证书
vi /etc/pki/tls/openssl.cnf subjectAltName = IP: ELK_server_private_ip ##在[ v3_ca ]部分找到
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
注:生成此证书,用于Filebeats与Logstash通信
B:使用域名
在dns管理网站上修改dns的a记录映射到elk server的ip地址上。
cd /etc/pki/tls openssl req -subj '/CN=ELK_server_dns/' -x509 -days 3650 -batch -nodes -newkey rsa:2048 -keyout private/logstash-forwarder.key -out certs/logstash-forwarder.crt
(3)配置Logstash
配置Filebeat输入文件,02-beats-input.conf
vi /etc/logstash/conf.d/02-beats-input.conf input { beats { port => 5044 ssl => true ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt" ssl_key => "/etc/pki/tls/private/logstash-forwarder.key" } }
配置日志过滤文件以及格式化处理,10-syslog-filter.conf
vi /etc/logstash/conf.d/10-syslog-filter.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" ] } } }
注:grok 过滤与定义日志格式,能从github上下载很多样本用来参考。
配置30-elasticsearch-output.conf 输出日志文件到elasticsearch。
vi /etc/logstash/conf.d/30-elasticsearch-output.conf output { elasticsearch { hosts => ["localhost:9200"] sniffing => true manage_template => false index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}" document_type => "%{[@metadata][type]}" } }
可以通过以下命令来测试logstash配置文件是否正确。
service logstash configtest
如果输出是Configuration OK,则代表配置文件修改没有问题。
systemctl restart logstash chkconfig logstash on
5.加载Kibana仪表盘
cd ~ curl -L -O https://download.elastic.co/beats/dashboards/beats-dashboards-1.1.0.zip[/code]cd beats-dashboards-* ./load.sh ##在Elasticsearch加载仪表盘,可视化,和默认的beats插件
[packetbeat] 搜集网络数据
[topbeat] 搜集系统cpu,ram负载相关信息
filebeats 搜集系统日志信息
winlogbeat 搜集windows系统日志信息
注:当我们使用kibana时,我们默认将Filebeat设为默认的选项。6. 在Elasticsearch上加载Filebeat默认模板
我们是计划收集数据到Elasticsearch进行存储,所以我们需要在Elasticsearch加在一个Filebeat模板。这个默认的模板将会配置Elasticsearch去智能分析Filebeat收集的日志。cd ~ curl -O https://gist.githubusercontent.com/thisismitch/3429023e8438cc25b86c/raw/d8c479e2a1adcea8b1fe86570e42abab0f10f364/filebeat-index-template.json ##下载json模板curl -XPUT 'http://localhost:9200/_template/filebeat?pretty' -d@filebeat-index-template.json ##加载模板到Elasticsearch如果模板加载正确,将会看到如下的输出。 { "acknowledged" : true }7.客户端安装Filebeat
(1)复制ELK server端生成的elk-forward证书scp /etc/pki/tls/certs/logstash-forwarder.crt user@client_server_private_address:/tmp 注:确保证书复制过来准确无误。因为这个证书用于Filebeat客户端与ELK服务端通信。sudo mkdir -p /etc/pki/tls/certs sudo cp /tmp/logstash-forwarder.crt /etc/pki/tls/certs/
(2)安装Filebeat packagerpm --import http://packages.elastic.co/GPG-KEY-elasticsearch ##导入gpg-key秘钥vi /etc/yum.repos.d/elastic-beats.repo ##导入FILEBEAT安装的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=1yum -y install filebeat
(3)修改配置文件/etc/filebeat/filebeat.yml修改收集log文件 vi /etc/filebeat/filebeat.yml ... paths: - /var/log/secure - /var/log/messages # - /var/log/*.log ...... document_type: syslog #删除原有的注释 ...将elasticsearch这一段全部删除或者是注释掉### Logstash as output logstash: # The Logstash hosts hosts: ["ELK_server_private_IP:5044"] #定义Filebeat与ELK_server连接方式Filebeat与Logstash安全通信配置 tls: # List of root certificates for HTTPS server verifications certificate_authorities: ["/etc/pki/tls/certs/logstash-forwarder.crt"]systemctl start filebeat systemctl enable filebeat
注:启动过后查看Filebeat的状态。如果没有启动可以参照如下检测配置文件。filebeat: prospectors: - paths: - /var/log/secure - /var/log/messages # - /var/log/*.log input_type: log document_type: syslog registry_file: /var/lib/filebeat/registry output: logstash: hosts: ["elk_server_private_ip:5044"] bulk_max_size: 1024 tls: certificate_authorities: ["/etc/pki/tls/certs/logstash-forwarder.crt"] shipper: logging: files: rotateeverybytes: 10485760 # = 10MB
(8)在ELK server上检测Filebeat是否与Logstash成功通信curl -XGET 'http://localhost:9200/filebeat-*/_search?pretty'
如果看到total与successful不为0。代表成功从client端取到日志。{ "took" : 4, "timed_out" : false, "_shards" : { "total" : 15, "successful" : 15, "failed" : 0 },
注:如果看到total与hits为0,代表通信受阻,无法从客户端取到日志。可以参照以下两个方式解决:
(1)查看Filebeat客户端配置是否正确,Filebeat是否成功启动。
(2)查看ELK_SERVER的安全组,确认5044端口是打开的。8.连接到Kinaba
在浏览器里面输入Kinaba服务端的公有ip地址,默认使用80端口即可。因为我们之前已经配置过nginx反向代理。将kibana的5601端口代理到nginx80端口。
(1)将Filebeat设置为默认选项
(2)查看kibana是否成功可视化日志数据
在笔者搭建部署ELK+Filebeat的过程中,参考了许多文章,这些文章使我受益匪浅,茅塞顿开。
https://www.digitalocean.com/community/tutorials/how-to-install-elasticsearch-logstash-and-kibana-elk-stack-on-centos-7
https://www.ibm.com/developerworks/cn/opensource/os-cn-elk-filebeat/index.html)
相关文章推荐
- ELK+Filebeat+Nginx集中式日志解决方案(一)
- ELK+Filebeat+Nginx集中式日志解决方案(二)——添加ElasticSearch集群
- ELK+Filebeat 集中式日志解决方案实践---概述(一)
- ELK+Filebeat 集中式日志解决方案详解
- ELK+Filebeat+Nginx集中式日志解决方案(三)—— 添加kafka+zookeeper集群
- Filebeat,Redis和ELK6.x集中式日志解决方案
- 在CentOS上集成filebeat+ELK docker收集日志
- ELK 5.0.1+Filebeat5.0.1 for LINUX RHEL6.6 监控MongoDB日志
- ELK+filebeat+kafka+zookeeper构建海量日志分析平台
- ELK日志处理之Filebeat工作原理
- ELK实战之使用filebeat代替logstash收集日志
- ELK+Filebeat+Kafka+ZooKeeper 构建海量日志分析平台 推荐
- ELK-filebeat收集日志到Kafka,并转存ES
- ELK 之Filebeat 结合Logstash 过滤出来你想要的日志
- Kubernetes部署ELK并使用Filebeat收集容器日志
- ELK菜鸟手记 (四) - 利用filebeat和不同端口把不同服务器上的log4j日志传输到同一台ELK服务器
- elk的安装部署三(kibana的安装及使用filebeat收集日志)
- Linux搭建ELK日志收集系统:FIlebeat+Redis+Logstash+Elasticse
- ELK日志系统:Filebeat使用及Kibana如何设置登录认证(转)
- ELK+Filebeat+Kafka+ZooKeeper 构建海量日志分析平台