一、系统的基本架构

  在以前的博客中有介绍过在物理机上搭建ELK日志分析系统,有兴趣的朋友可以看一看-------------->>链接戳我<<。这篇博客将介绍如何使用Docker来更方便快捷的搭建,架构图如下:

  说明:WEB服务器代表收集日志的对象,由Filebeat收集日志后发送给Logstash2,再由Logstash2发送至Redis消息队列,然后由Redis发送至Logstash1,最后由ElasticSearch收集处理并由Kibana进行可视化显示。这里之所以需要两层Logstash是因为WEB服务器可以是任何服务器,可能会出现多个不同日志需要分析。这个架构可以用在较大规模的集群中,在生产中可以将各个功能单点进行扩展,例如将Redis和Logstash集群化。

二、Docker搭建ES集群

  默认系统已安装好docker,创建ES集群docker挂载目录,编辑配置文件:

~]# mkdir -pv /root/elk/{logs,data,conf}
vim /root/elk/conf/elasticsearch.yml
cluster.name: es5.-cluster #集群识别名,在一个集群中必须同名
node.name: node1 #节点标识
network.host: 192.168.29.115 #节点IP
http.port: 9200 #监听端口
discovery.zen.ping.unicast.hosts: ["192.168.29.115", "192.168.29.116"] #集群节点
http.cors.enabled: true
http.cors.allow-origin: "*"
~]# docker container run --name es5. \
--network host \
-v /root/elk/conf/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /root/elk/data/:/usr/share/elasticsearch/data/ \
-v /root/elk/logs/:/usr/share/elasticsearch/logs/ \
-p : \
-p : \
-d --rm docker.io/elasticsearch:5.6

  安装ElasticSearch-head,查看ES集群是否安装成功:

~]# docker container run --name es-head -p : -d --rm mobz/elasticsearchhead:

三、Docker安装Filebeat

  编辑Filebeat配置文件,把配置文件、log挂载至docker卷,,定义要送至Logstash的log文件与输出目标:

vim /root/filebeat/conf/filebeat.yml
filebeat.prospectors:
- input_type: log
paths:
- /var/log/messages
exclude_lines: ["^DBG"]
document_type: system-log-
- input_type: log
paths:
- /var/log/nginx/access.log
document_type: nginx-log-0019 #相对的是logstash中的type,可以在Logstash中做if判断
output.logstash:
hosts: ["192.168.29.119:5044","192.168.29.119:5045"]
enabled: true
worker:
compression_level:
loadbalance: true
~]# docker container run --name filebeat --network host \
-v /root/filebeat/conf/filebeat.yml:/usr/share/filebeat/filebeat.yml \
-v /var/log/messages:/var/log/messages \
-v /var/log/nginx/access.log:/var/log/nginx/access.log \
--rm -d docker.elastic.co/beats/filebeat:5.6.15 \
filebeat -c /usr/share/filebeat/filebeat.yml

四、Docker安装Logstash

docker container run --name logstash \
-p : \
-v /var/log/nginx/access.log:/var/log/nginx/access.log \
-v /var/log/messages:/var/log/messages \
-v /root/logstash/pipeline/stdout.conf:/etc/logstash/conf.d/stdout.conf \
-d --network host -it --rm docker.io/logstash:5.6 \
-f /etc/logstash/conf.d/stdout.conf

  Logstash收集多个日志并输出示例(与此架构无关,只是示范示例):

vim /root/logstash/pipeline/stdout.conf
input {
file {
type => "nginxaccesslog"
path => "/var/log/nginx/access.log"
start_position => "beginning"
}
file {
type => "syslog"
path => "/var/log/messages"
start_position => "beginning"
}
}
output {
if [type] == "nginxaccesslog" {
elasticsearch {
hosts => ["192.168.29.115:9200"]
index => "nginx-log-0018-%{+YYYY.MM.dd}"
}
}
if [type] == "syslog" {
elasticsearch {
hosts => ["192.168.29.115:9200"]
index => "syslog-0018-%{+YYYY.MM.dd}"
}
}
}

  配置Logstash2上的输入输出配置:

  这里先进行测试,用Filebeat收集WEB服务器上的 /var/log/messages 与 /var/log/nginx/access.log 日志并进行标准输出,配置如下:

vim /root/logstash/conf/stdout.conf
input {
beats {
port =>
codec => "json"
}
beats {
port =>
codec => "json"
}
}
output {
stdout {
codec => "rubydebug"
}
}

  启动Logstash2并查看是否可读取日志并输出:

docker container run --name logstash \
-p : \
-v /root/logstash/conf/stdout.conf:/etc/logstash/conf.d/stdout.conf -it \
--network host \
--rm docker.io/logstash:5.6 \
-f /etc/logstash/conf.d/stdout.conf

  如截图所示便是正常:

  可以看到/var/log/messages与/var/log/nginx/access.log都能正常收集并输出。

五、Docker安装Redis

  修改配置:

vim /root/redis/conf/redis.conf
bind 0.0.0.0
port
requirepass 123456 #配置密码
save ""
pidfile /var/run/redis/redis.pid
logfile /var/log/redis/redis.log #注意权限

  运行:

~]# docker container run --name redis \
-v /root/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf \
-v /root/redis/log/redis.log:/var/log/redis/redis.log \
-v /root/redis/run/redis.pid:/var/run/redis/redis.pid \
-v /root/redis/data/:/data/ \
-p : --network host -d \
docker.io/redis: redis-server /usr/local/etc/redis/redis.conf

六、Docker启动并配置Logstash2收集多日志并送至Redis

vim /root/logstash/conf/stdout.conf
input {
beats {
port =>
codec => "json"
}
beats {
port =>
codec => "json"
}
}
output {
if [type] == "system-log-0019" {
redis {
data_type => "list"
host => "192.168.29.117"
port => ""
key => "system-log-0019"
db => ""
password => ""
}
}
if [type] == "nginx-log-0019" {
redis {
data_type => "list"
host => "192.168.29.117"
port => ""
key => "nginx-log-0019"
db => ""
password => ""
}
}
}

  再次启动Logstash2:

~]# docker container run --name logstash \
-p : \
-v /root/logstash/conf/stdout.conf:/etc/logstash/conf.d/stdout.conf -it \
--network host \
--rm docker.io/logstash:5.6 \
-f /etc/logstash/conf.d/stdout.conf

  链接Redis查看日志是否已被收集

~]# redis-cli -h 192.168.29.117
192.168.29.117:> AUTH
OK
192.168.29.117:> SELECT #选择数据库号
OK
192.168.29.117:[]> KEYS *
) "nginx-log-0019" #可以看到日志已写入成功,这里是前面在Logstash中定义的key
) "system-log-0019"
192.168.29.117:[]> LLEN system-log-
(integer)
192.168.29.117:[]> LLEN nginx-log-
(integer)

  也可以在Redis上查看是否连接:

~]# lsof -n -i:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
redis-ser polkitd 6u IPv4 0t0 TCP *: (LISTEN)
redis-ser polkitd 7u IPv4 0t0 TCP 192.168.29.117:->192.168.29.104: (ESTABLISHED)
redis-ser polkitd 10u IPv4 0t0 TCP 127.0.0.1:->127.0.0.1: (ESTABLISHED)
redis-cli root 3u IPv4 0t0 TCP 127.0.0.1:->127.0.0.1: (ESTABLISHED)

  以上步骤log文件走向:WEB→Filebeat→Logstash2→Redis。下面再来配置Redis→Logstash1→ES→Kibana。

七、docker配置Logstash1

vim /root/logstash/conf/stdout.conf
input {
redis {
data_type => "list"
host => "192.168.29.117"
port => ""
key => "system-log-0019"
db => ""
password => ""
}
redis {
data_type => "list"
host => "192.168.29.117"
port => ""
key => "nginx-log-0019"
db => ""
password => ""
codec => "json"
}
}
output {
if [type] == "system-log-0019" { #用if判断来选择ES节点
elasticsearch {
hosts => ["192.168.29.115:9200"] #节点可以自定义
index => "system-log-0019-%{+YYYY.MM.dd}"
}
}
if [type] == "nginx-log-0019" {
elasticsearch {
hosts => ["192.168.29.115:9200"]
index => "nginx-log-0019-%{+YYYY.MM.dd}"
}
}
}

  启动Logstash1并挂载配置:

~]# docker container run --name logstash \
-p : \
-v /root/logstash/conf/stdout.conf:/etc/logstash/conf.d/stdout.conf -it \
--network host \
--rm docker.io/logstash:5.6 \
-f /etc/logstash/conf.d/stdout.conf

  查看Redis中的数据是否已被ES取走:

192.168.29.117:[]> LLEN nginx-log-
(integer)
192.168.29.117:[]> LLEN system-log-
(integer)

  以上Redis显示说明数据已被ES取走。

八、docker启动并配置Kibana

  配置Kibana:

vim /etc/kibana/kibana.yml
server.host: "127.0.0.1"
elasticsearch.url: "http://192.168.29.115:9200"

  启动Kibana:

~]# docker container run --name kibana \
-v /etc/kibana/kibana.yml:/etc/kibana/kibana.yml \
--network host \
-p : \
-d --rm kibana:5.6

  为安全起见,这里建议用Nginx加密返代Kibana进行访问。

  最后在Kibana中添加index就能访问并搜索采集的日志了:

Docker搭建ElasticSearch+Redis+Logstash+Filebeat日志分析系统的更多相关文章

  1. 快速搭建ELK7.5版本的日志分析系统--搭建篇

    title: 快速搭建ELK7.5版本的日志分析系统--搭建篇 一.ELK安装部署 官网地址:https://www.elastic.co/cn/ 官网权威指南:https://www.elastic ...

  2. ELK + Filebeat 日志分析系统

    ELK + Filebeat 日志分析系统 架构图 环境 OS:CentOS 7.4 Filebeat: 6.3.2 Logstash: 6.3.2 Elasticsearch 6.3.2 Kiban ...

  3. filebeat+redis+logstash+elasticsearch+kibana搭建日志分析系统

    filebeat+redis+elk搭建日志分析系统 官网下载地址:https://www.elastic.co/downloads 1.下载安装filebeat wget https://artif ...

  4. Docker笔记(十):使用Docker来搭建一套ELK日志分析系统

    一段时间没关注ELK(elasticsearch —— 搜索引擎,可用于存储.索引日志, logstash —— 可用于日志传输.转换,kibana —— WebUI,将日志可视化),发现最新版已到7 ...

  5. centos7搭建ELK Cluster集群日志分析平台(二):Logstash

    续  centos7搭建ELK Cluster集群日志分析平台(一) 已经安装完Elasticsearch 5.4 集群. 安装Logstash步骤 . 安装Java 8 官方说明:需要安装Java ...

  6. centos7搭建ELK Cluster集群日志分析平台(一):Elasticsearch

    应用场景: ELK实际上是三个工具的集合,ElasticSearch + Logstash + Kibana,这三个工具组合形成了一套实用.易用的监控架构, 很多公司利用它来搭建可视化的海量日志分析平 ...

  7. ELK_日志分析系统Logstash+ElasticSearch+Kibana4

    elk 日志分析系统 Logstash+ElasticSearch+Kibana4 logstash 管理日志和事件的工具 ElasticSearch 搜索 Kibana4 功能强大的数据显示客户端 ...

  8. elk 日志分析系统Logstash+ElasticSearch+Kibana4

    elk 日志分析系统 Logstash+ElasticSearch+Kibana4 logstash 管理日志和事件的工具 ElasticSearch 搜索 Kibana4 功能强大的数据显示clie ...

  9. docker:搭建ELK 开源日志分析系统

    ELK 是由三部分组成的一套日志分析系统, Elasticsearch: 基于json分析搜索引擎,Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片 ...

随机推荐

  1. Vue(MVVM)、React(MVVM)、Angular(MVC)对比

    前言 昨天阿里内推电面一面,面试官了解到项目中用过Vue,就问为什么前端框架使用Vue而不适用其他的框架,当时就懵了.因为只用过Vue,不了解其他两个框架,今天就赶紧去了解一下他们之间的区别.大家发现 ...

  2. 错误提示:Dynamic Performance Tables not accessible, Automatic Statistics Disabled for this session You can disable statistics in the preference menu,or obtanin select priviliges on the v$session,v$sess

    1.错误提示:Dynamic Performance Tables not accessible, Automatic Statistics Disabled for this session You ...

  3. JVM之垃圾回收

    1.哪些内存需要回收?判断对象已死的方法(存活判定算法) 1.引用计数算法:难以解决对象之间相互循环引用的问题,不使用. 2.可达性分析算法:通过一系列“GC Root”对象作为起始点向下搜索,所走过 ...

  4. 《Android插件化开发指南》面世

    本书在京东购买地址:https://item.jd.com/31178047689.html 本书Q群:389329264 (一)这是一本什么书 如果只把本书当作纯粹介绍Android插件化技术的书籍 ...

  5. CSS3禁止用户选中文字——user-select: none;

    需求:现在有一个需求是在移动端让你禁止用户选中文字,你会怎么做呢?如下图    解决方法:使用CSS3新增属性 user-select: none;   -webkit-user-select:non ...

  6. [Swift]LeetCode954. 二倍数对数组 | Array of Doubled Pairs

    Given an array of integers A with even length, return true if and only if it is possible to reorder ...

  7. Redis 设计与实现 (四)--事件、客户端

    事件 一.文件事件 文件事件处理器使用I/O多路复用程序来同时监听多个套接字, 监听套接字,分配对应的处理事件. 四个组成部分:套接字 .I/O多路复用 . 文件事件分派器 . 事件处理器 连接应答处 ...

  8. Android开发:Android虚拟机启动错误Can't find 'Linux version ' string in kernel image file

    Android启动出错,虚拟机报错信息如下: Starting emulator for AVD 'test' emulator: ERROR: Can't find 'Linux version ' ...

  9. [IOI2007] sails 船帆

    显然答案与杆的顺序无关(按每个高度考虑). 从高到低考虑杆,设此时的状态为\(S\),\(S[i]\)是高度\(i\)的帆的数目,初始全为\(0\),当前杆的高度为\(h\),杆上需要放置的帆的数目为 ...

  10. 细说javascripe事件传播流程

    当我们使用js时,经常会遇到事件传播流程的问题,下面我说一下我的观点. 在js触发某个事件时会相应生成一个事件对象,而这个事件对象则会根据DOM事件流的方向进传递,而传递的顺序如下图所示: 事件对象会 ...