您的位置:首页 > 运维架构 > Linux

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) 安装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[/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 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设置为默认选项



(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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: