ELK+Filebeat集中式日志解决方案(centos7)

一.ELK Stack 概述

   ELK是一组开源软件的简称,其包括Elasticsearch、Logstash 和 Kibana。ELK最近几年发展迅速,已经成为目前最流行的集中式日志解决方案。
  • Elasticsearch: 能对大容量的数据进行接近实时的存储,搜索和分析操作。 本项目中主要通过Elasticsearch存储所有获取的日志。

  • Logstash: 数据收集引擎,它支持动态的的从各种数据源获取数据,并对数据进行过滤,分析,丰富,统一格式等操作,然后存储到用户指定的位置。

  • Kibana: 数据分析与可视化平台,对Elasticsearch存储的数据进行可视化分析,通过表格的形式展现出来。

  • Filebeat: 轻量级的开源日志文件数据搜集器。通常在需要采集数据的客户端安装Filebeat,并指定目录与日志格式,Filebeat就能快速收集数据,并发送给logstash进行解析,或是直接发给Elasticsearch存储。

二.ELK常用的架构

1. 基础结构

ELK+Filebeat集中式日志解决方案(centos7)_第1张图片

   单一的架构,logstash作为日志搜集器,从数据源采集数据,并对数据进行过滤,格式化处理,然后交由Elasticsearch存储,kibana对日志进行可视化处理。

2.多节点部署Logstash架构

ELK+Filebeat集中式日志解决方案(centos7)_第2张图片

    这种架构模式适合需要采集日志的客户端不多,且各服务端cpu,内存等资源充足的情况下。因为每个节点都安装Logstash, 非常消耗节点资源。其中,logstash作为日志搜集器,将每一台节点的数据发送到Elasticsearch上进行存储,再由kibana进行可视化分析。

3.多节点部署Filebeats架构

ELK+Filebeat集中式日志解决方案(centos7)_第3张图片

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) 安装Logstash

vi /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
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 package

rpm --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=1
 yum -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设置为默认选项
ELK+Filebeat集中式日志解决方案(centos7)_第4张图片

(2)查看kibana是否成功可视化日志数据

ELK+Filebeat集中式日志解决方案(centos7)_第5张图片

在笔者搭建部署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)

你可能感兴趣的:(运维)