我是靠谱客的博主 外向乌龟,最近开发中收集的这篇文章主要介绍ELK+Filebeat集中式日志解决方案(centos7),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一.ELK Stack 概述


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

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

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

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

二.ELK常用的架构

1. 基础结构

基础架构


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

2.多节点部署Logstash架构

logstash作为日志搜集器


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

3.多节点部署Filebeats架构

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
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)

最后

以上就是外向乌龟为你收集整理的ELK+Filebeat集中式日志解决方案(centos7)的全部内容,希望文章能够帮你解决ELK+Filebeat集中式日志解决方案(centos7)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(51)

评论列表共有 0 条评论

立即
投稿
返回
顶部