1. 日志平台的结构示意图
说明:
多个独立的agent(Shipper)负责收集不同来源的数据,一个中心agent(Indexer)负责汇总和分析数据,在中心agent前 的Broker(使用redis实现)作为缓冲区,中心agent后的ElasticSearch用于存储和搜索数据,前端的Kibana提供丰富的图表 展示。Shipper表示日志收集,使用LogStash收集各种来源的日志数据,可以是系统日志、文件、redis、mq等等;Broker作为远程agent与中心agent之间的缓冲区,使用redis实现,一是可以提高系统的性能,二是可以提高系统的可靠性,当中心agent提取数据失败时,数据保存在redis中,而不至于丢失;中心agent也是LogStash,从Broker中提取数据,可以执行相关的分析和处理(Filter);ElasticSearch用于存储最终的数据,并提供搜索功能;Kibana提供一个简单、丰富的web界面,数据来自于ElasticSearch,支持各种查询、统计和展示;
2. 搭建部署
环境:
本机(192.168.132.126)上部署:redis, 中心agent(LogStash), ElasticSearch以及Kibana
远程测试机(192.168.132.128)上部署:独立agent(LogStash)
Redis版本:3.0.0-rc1
LogStash版本;logstash-1.4.2
ElasticSearch版本:elasticsearch-1.4.3
Kibana版本:kibana-3.1
.1
2.1 部署redis
部署一个redis单机实例:
$ wget https://github.com/antirez/redis/archive/3.0.0-rc1.tar.gz
$ tar zxvf 3.0.0-rc1.tar.gz -C /usr/local
Cd /usr/local
Make
Make PREFIX=/usr/local/redis-3.0.5
redis.conf配置文件为:
include ../redis.conf
daemonize yes
pidfile /var/run/redis_6379.pid
port 6379
logfile /opt/logs/redis/6379.log
appendonly yes
启动Redis:
$ redis.server redis.conf
ip为192.168.132.126, 端口为6379
2.2 部署中心LogStash
下载并解压:
$ wget https://download.elasticsearch.org/logstash/logstash/logstash-1.4.2.tar.gz
$ tar zxvf logstash-1.4.2.tar.gz -C /usr/local/
$ cd /usr/local/logstash-1.4.2
$ mkdir conf logs
配置文件conf/central.conf:
input {
redis {
host => "127.0.0.1"
port => 6379
type => "redis-input"
data_type => "list"
key => "key_count"
}
}
output {
stdout {}
elasticsearch {
cluster => "elasticsearch"
codec => "json"
protocol => "http"
}
}
启动Logstash 代理:
$ bin/logstash agent --verbose --config conf/central.conf --log logs/stdout.log
配置文件表示输入来自于redis,使用redis的list类型存储数据,key为”key_count”;输出到elasticsearch,cluster的名称为”elasticsearch”;
2.3 部署ElasticSearch
下载并解压:
$ wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-1.4.3.tar.gz
$ tar zxvf elasticsearch-1.4.3.tar.gz -C /usr/local
elasticsearch使用默认配置即可,默认的cluster name为:elasticsearch;
修改配置文件conf/elasticsearch.yml
添加一下语句
http.cors.allow-origin: "/.*/"
http.cors.enabled: true
否者会报错Your elasticsearch server is down or unreachable
启动ES:
$ bin/elasticsearch -d
2.4 部署远程LogStash
与部署中心LogStash的步骤是类似的,只是配置文件不一样,使用新的配置文件启动即可;
配置文件conf/shipper.conf的内容为:
input {
file {
type => "type_count"
path => ["/data/logs/count/stdout.log", "/data/logs/count/stderr.log"]
exclude => ["*.gz", "access.log"]
}
}
output {
stdout {}
redis {
host => "192.168.132.126"
port => 6379
data_type => "list"
key => "key_count"
}
}
配置文件表示输入来自于目录/data/logs/count/下的stdout.log和stderr.log两个文件,且排除该目录下所 有.gz文件和access.log;(这里因为path没有使用通配符,所以exclude是没有效果的);输出表示将监听到的event发送到 redis服务器,使用redis的list保存,key为”key_count”,这里的data_type属性和key属性应该与中心agent的配置一致;
2.5 部署Kibana
下载并安装:
$ wget https://download.elasticsearch.org/kibana/kibana/kibana-3.1.1.tar.gz
$ tar zxvf kibana-3.1.1.tar.gz
修改配置文件config.js,仅需要配置elasticsearch的地址即可:
elasticsearch: "http://192.168.132.126:9200"
将目录kibana-3.1.1拷贝到jetty的webapp目录下,并启动jetty:
$ mv kibana-3.1.1 /usr/local/jetty-distribution-9.2.1.v20140609/webapps/
$ bin/jetty start
浏览器访问:
http://192.168.132.126:8080/kibana-3.1.1/
1.
简单测试
2.
打开LogStash的远程agent和中心agent的日志:
$ tail -f logs/stdout.log
远程agent的数据是以rpush操作将event推送到redis的list中,中心agent通过blpop命令从redis的list中提取数据,因此,测试时由于数据量小,通过命令llen key_count的返回结果很可能为空,因此为了观察redis中数据流的变化,可以使用monitor命令:
$ redis-cli -p 6379 monitor
现在,我们向/data/logs/count目录下的stdout.log和stderr.log各发送一条数据:
$ echo "stdout: just a test message" >> stdout.log
$ echo "stderr: just a test message" >> stderr.log
远程agent和中心agent都会收到event消息,如远程agent的日志为:
{:timestamp=>"2016-11-01T09:30:40.323000+0800", :message=>"Received line", :path=>"/data/logs/count/stdout.log", :text=>"stdout: just a test message", :level=>:debug, :file=>"logstash/inputs/file.rb", :line=>"134"}
{:timestamp=>"2016-11-01T09:30:40.325000+0800", :message=>"writing sincedb (delta since last write = 52)", :level=>:debug, :file=>"filewatch/tail.rb", :line=>"177"}
......
{:timestamp=>"2014-10-31T09:30:49.350000+0800", :message=>"Received line", :path=>"/data/logs/count/stderr.log", :text=>"stderr: just a test message", :level=>:debug, :file=>"logstash/inputs/file.rb", :line=>"134"}
{:timestamp=>"2016-11-01T09:30:49.352000+0800", :message=>"output received", :event=>{"message"=>"stderr: just a test message", "@version"=>"1", "@timestamp"=>"2016-11-01T01:30:49.350Z", "type"=>"type_count", "host"=>"dn1", "path"=>"/data/logs/count/stderr.log"}, :level=>:debug, :file=>"(eval)", :line=>"19"}
我们可以观察到redis的输出:
1414714174.936642 [0 192.168.132.128:54010] "rpush" "key_count" "{\"message\":\"stdout: just a test message\",\"@version\":\"1\",\"@timestamp\":\"2016-11-01T00:10:04.530Z\",\"type\":\"type_count\",\"host\":\"dn1\",\"path\":\"/data/logs/count/stdout.log\"}"
1414714174.939517 [0 127.0.0.1:56094] "blpop" "key_count" "0"
1414714198.991452 [0 192.168.132.128:54010] "rpush" "key_count" "{\"message\":\"stderr: just a test message\",\"@version\":\"1\",\"@timestamp\":\"2016-11-01T00:10:28.586Z\",\"type\":\"type_count\",\"host\":\"dn1\",\"path\":\"/data/logs/count/stderr.log\"}"
1414714198.993590 [0 127.0.0.1:56094] "blpop" "key_count" "0"
从elasticsearch中执行如下的简单查询:
$ curl 'localhost:9200/_search?q=type:type_count&pretty'
{
"took" : 3,
"timed_out" : false,
"_shards" : {
"total" : 6,
"successful" : 6,
"failed" : 0
},
"hits" : {
"total" : 2,
"max_score" : 0.5945348,
"hits" : [ {
"_index" : "logstash-2016-11-01",
"_type" : "type_count",
"_id" : "w87bRn8MToaYm_kfnygGGw",
"_score" : 0.5945348,
"_source":{"message":"stdout: just a test message","@version":"1","@timestamp":"2016-11-01T08:10:04.530+08:00","type":"type_count","host":"dn1","path":"/data/logs/count/stdout.log"}
}, {
"_index" : "logstash-2016-11-01",
"_type" : "type_count",
"_id" : "wwmA2BD6SAGeNsuYz5ax-Q",
"_score" : 0.5945348,
"_source":{"message":"stderr: just a test message","@version":"1","@timestamp":"2016-11-01T08:10:28.586+08:00","type":"type_count","host":"dn1","path":"/data/logs/count/stderr.log"}
} ]
}
}
再切换到Kibana的web界面:http://192.168.132.126:8080/kibana-3.1.1
4. 后续工作
使用LogStash的Filter对日志数据进行过滤和分析;
使用Redis的Cluster模式替换单机模式;
在elasticsearch中对数据进行高级的分析和查询;
熟悉Kibana的展示组件以及查询语法;
- 大小: 42 KB
分享到:
相关推荐
efk/elk日志收集系统搭建和报警项目实战-7.13版本-课件
ELK日志分析系统搭建与配置 ELK 日志分析系统是由 ElasticSearch、Logstash 和 Kibana 三个开源工具组成的,旨在解决日志集中化管理、信息查找、服务诊断和数据分析等问题。本文将指导用户搭建自己的 ELK 日志分析...
【Centos7下搭建ELK日志分析系统】 ELK栈是日志管理和分析的强大工具,由Elasticsearch、Logstash、Kibana三个组件组成。Elasticsearch是一个分布式的实时搜索和分析引擎,用于存储、分析和检索大量数据。Logstash...
在搭建ELK日志收集分析系统时,有几种常见的架构设计。最简单的是Elasticsearch+Logstash+Kibana,但生产环境通常推荐使用Elasticsearch+Logstash+Filebeat+Kibana或Elasticsearch+Logstash+Filebeat+Kafka+Kibana的...
在本案例中,我们将基于VMware搭建一个完整的ELK日志管理系统,其中包括Elasticsearch集群、Logstash集群、Kibana以及Kafka集群,以及用于日志采集的Filebeat。 首先,搭建环境需要准备VMware Workstation 15 Pro...
**ELK日志收集系统集群搭建** ELK是Elasticsearch、Logstash和Kibana三个开源工具的首字母缩写,它们共同构成了一个强大的日志管理和分析平台。ELK stack在IT运维、数据分析和安全监控等领域有广泛的应用,帮助用户...
elk日志收集搭建教程,最详细的教程,真心推荐
搭建ELK实时日志收集系统通常需要在服务器上安装Elasticsearch、Logstash、Kibana及Filebeat。这些组件的安装步骤相对直观,需要注意的是各组件的版本兼容性问题以及配置文件的正确设置。例如,Elasticsearch需要在...
### ELK日志分析系统详解 #### 一、ELK平台概述 ELK栈是由Elasticsearch、Logstash和Kibana三个核心组件组成的开源工具集合,主要用于收集、存储、分析和可视化各种类型的日志数据。 ##### 1.1 ELK概述 - **...
搭建 ELK 日志分析系统 1. 搭建 Elasticsearch:下载 Elasticsearch,创建用户,并将 Elasticsearch 安装权限归新用户所有。修改配置,启动 Elasticsearch。 2. 搭建 Logstash:下载 Logstash,修改配置,启动 ...
搭建ELK日志分析系统在OpenStack中的步骤大致如下: 1. **安装和配置Elasticsearch**:在适合的服务器上安装Elasticsearch,配置网络设置,以便Logstash和Kibana能够与其通信。可能需要调整内存分配、索引策略等,...
### ELK日志平台简单搭建方案 #### 一、引言 随着信息技术的快速发展,日志数据变得越来越庞大且复杂,对于企业的运维管理和数据分析提出了更高要求。ELK(Elasticsearch、Logstash 和 Kibana)堆栈因其高效的数据...
6. **安装配置流程**:按照文档,安装配置ELK日志归集系统需要依次进行Kafka和Zookeeper的安装、Filebeat的配置、Elasticsearch的安装、Logstash的配置,最后是Kibana的安装。每个步骤都需要根据实际环境进行相应的...
这个压缩包包含了一个已经搭建成功的ELK环境的相关文件和详细部署文档,帮助用户快速理解和设置自己的日志收集、存储和可视化系统。 **Elasticsearch** 是ELK堆栈的核心,它是一个分布式、RESTful风格的搜索和数据...
**搭建ELK日志系统的步骤**: 1. **环境准备**: 首先确保你有一台运行CentOS 7的服务器,并安装了Java 8和Node.js v9.8.0(因为Kibana依赖Node.js)。然后,你需要下载ELK栈的四个组件:Filebeat、Logstash、...
在搭建ELK日志分析系统时,以下是一些关键步骤: 1. 安装Elasticsearch并确保其在9200端口上监听。可以使用`ps -ef | grep elasticsearch`命令检查进程状态,或通过浏览器访问`http://localhost:9200`验证服务是否...
接下来,我们将深入探讨如何快速且简单地构建ELK日志系统群集。 **Elasticsearch** Elasticsearch是核心部分,它是一个基于Lucene的分布式搜索引擎,提供实时、高可扩展的数据搜索和分析功能。在ELK集群中,Elastic...