简介:

ELK 是一套开源的日志管理平台,主要包括三个组件,可以用于日志的收集、分析、存储和展示工作。

ELK 成员:Elasticsearch 、Logstash 、Kibana( K4 )

ELK 平台特性:

1、处理方式灵活,Elasticsearch 采用实时全文索引,不需要像 storm 一样预先编程才能使用
2、配置简单、易上手,Elasticsearch 全部采用 Json 接口;Logstash 是 Ruby DSL 设计,都是业界最通用的配置语法设计
3、检索性能高效,虽然每次查询都是实时计算,但是优秀的设计和实现基本可以达到全天数据查询的秒级响应
4、集群线性扩展,Elasticsearch 、Logstash 集群都可以线性扩展
5、前端操作简单、界面漂亮,只需点击鼠标就可以完成搜索、聚合功能,生成炫酷的仪表盘

ELK 各成员工作职责:

1、Logstash 是一个开源的日志收集管理工具,支持各种日志类型的接收、处理、转发
2、Elasticsearch 是一个分布式、接近实时的搜索引擎,支持时间索引、全文索引,可以看作是一个文本数据库
3、Kibana 负责将 Elasticsearch 中的数据,按需求展示信息

ELK 扩展成员:

Redis : 一般情况下被用作 NoSQL 数据库,而这里是作为消息队列存在的,意思是:当客户端将消息写入队列后,服务端会把消息取走,所以不必担心会把机器内存占满
Nginx : 一般情况下被用作 Web 服务器或 Web 缓存、反向代理、负载均衡器,呃,这里也是用作将请求反向代理到 Kibana 的监听端口( 虽然 Kibana 也可以直接对外提供服务,但是考虑到性能、安全跟别的问题还是这样比较好 )

软件下载地址:https://www.elastic.co/downloads

Elasticsearch : https://download.elastic.co/elasticsearch/elasticsearch/elasticsearch-1.6.0.tar.gz
Logstash : https://download.elastic.co/logstash/logstash/logstash-1.5.2.tar.gz
Kibana : https://download.elastic.co/kibana/kibana/kibana-4.1.1-linux-x64.tar.gz

## 这里使用的源码包,你也可以在这里下载对应的 RPM 包

环境描述:

192.168.214.20 服务端
192.168.214.30 客户端

## 操作系统:CentOS 6.6 x86_64 安装方式:minimal

一、客户端操作( 安装、配置 Logstash )

1、安装 Logstash

shell > yum -y install java  ## 也可以下载源码的 jdk 包来安装,推荐这种简单暴力的方式

shell > cd /usr/local/src

shell > wget https://download.elastic.co/logstash/logstash/logstash-1.5.2.tar.gz

shell > tar zxf logstash-1.5..tar.gz

shell > mv logstash-1.5. ../logstash

shell > /usr/local/logstash/bin/logstash -e 'input{stdin{}} output{stdout{}}'
Hello World
--14T11::.287Z localhost.localdomain Hello World

## -e 参数可以直接从命令行获取信息,后面花括号中的意思为:从标准输入接收数据,输出到标准输出
## 当输入 Hello World 时,输出下面的信息:时间、主机名、内容
## 按 Ctrl+c 停止

shell > /usr/local/logstash/bin/logstash -e 'input{stdin{}} output{stdout{codec=>rubydebug}}'
Hello World

## 与上次不同的是,添加了 codec 参数,改变了输出格式,可以在配置文件中定义 input 、codec 、filter 、output

{
"message" => "Hello World",
"@version" => "",
"@timestamp" => "2015-07-14T11:55:55.235Z",
"host" => "localhost.localdomain"
}

## 这是输出信息

2、配置 Logstash

shell > vim /usr/local/logstash/logstash.conf

# Logstash.conf

input {
file {
path => '/tmp/access.log'
start_position => 'beginning'
}
} output {
redis {
host => '192.168.214.20'
port => ''
data_type => "list"
key => "logstash-list"
}
}

## logstash.conf 中至少要有一个 input 跟 output ,否则默认使用 stdin 跟 stdout

二、服务端操作( Redis 、Elasticsearch 、Logstash 、Kibana )

1、安装、配置、启动 Redis

shell > cd /usr/local/src

shell > wget http://download.redis.io/releases/redis-3.0.2.tar.gz

shell > tar zxf redis-3.0..tar.gz

shell > cd redis-3.0. ; make ; make install

shell > mkdir /usr/local/redis

shell > cp /usr/local/src/redis-3.0./redis.conf /usr/local/redis/

shell > sed -i '/daemonize/s/no/yes/' /usr/local/redis/redis.conf

shell > sed -i 's#dir ./#dir /usr/local/redis#' /usr/local/redis/redis.conf

shell > redis-server /usr/local/redis/redis.conf

shell > redis-cli ping
PONG

## 至此,证明 Redis 启动正常( 想进一步了解 Redis 的小伙伴可以参考官方文档,http://blog.chinaunix.net/uid/30272825/cid-211045-list-1.html 这里也有!)

shell > iptables -I INPUT -p tcp --dport  -j ACCEPT

shell > service iptables save

## 要开放 TCP 6379 端口,不然客户端数据写不进来

2、测试一

## 客户端启动 Logstash ,然后服务端查看 Redis 中有没有数据

shell > /usr/local/logstash/bin/logstash -f /usr/local/logstash/logstash.conf & ( 客户端 )

shell > redis-cli
127.0.0.1:> keys *
) "logstash-list"
127.0.0.1:> LRANGE logstash-list -
) "{\"message\":\"12.12.12.12 error\",\"@version\":\"1\",\"@timestamp\":\"2015-07-14T17:34:02.779Z\",\"host\":\"localhost.localdomain\",\"path\":\"/tmp/access.log\"}"
) "{\"message\":\" [02/Mar/2015:00:42:20 +0800] \\\"POST /include/dialog/select_soft_post.php HTTP/1.1\\\" 404 233\",\"@version\":\"1\",\"@timestamp\":\"2015-07-14T17:37:04.366Z\",\"host\":\"localhost.localdomain\",\"path\":\"/tmp/access.log\"}"
) "{\"message\":\"149.129.145.215 - - [02/Mar/2015:01:16:56 +0800] \\\"GET /tmUnblock.cgi HTTP/1.1\\\" 400 226\",\"@version\":\"1\",\"@timestamp\":\"2015-07-14T17:37:04.375Z\",\"host\":\"localhost.localdomain\",\"path\":\"/tmp/access.log\"}"
) "{\"message\":\"210.63.99.212 - - [02/Mar/2015:02:49:24 +0800] \\\"HEAD / HTTP/1.0\\\" 403 -\",\"@version\":\"1\",\"@timestamp\":\"2015-07-14T17:37:04.380Z\",\"host\":\"localhost.localdomain\",\"path\":\"/tmp/access.log\"}"
) "{\"message\":\"222.186.128.50 - - [02/Mar/2015:03:07:36 +0800] \\\"GET http://www.baidu.com/ HTTP/1.1\\\" 403 202\",\"@version\":\"1\",\"@timestamp\":\"2015-07-14T17:37:04.381Z\",\"host\":\"localhost.localdomain\",\"path\":\"/tmp/access.log\"}"
) "{\"message\":\"222.186.128.55 - - [02/Mar/2015:06:53:21 +0800] \\\"GET http://www.baidu.com/ HTTP/1.1\\\" 403 202\",\"@version\":\"1\",\"@timestamp\":\"2015-07-14T17:37:04.381Z\",\"host\":\"localhost.localdomain\",\"path\":\"/tmp/access.log\"}"
) "{\"message\":\"222.186.128.53 - - [02/Mar/2015:07:10:43 +0800] \\\"GET http://www.baidu.com/ HTTP/1.1\\\" 403 202\",\"@version\":\"1\",\"@timestamp\":\"2015-07-14T17:37:04.382Z\",\"host\":\"localhost.localdomain\",\"path\":\"/tmp/access.log\"}"
) "{\"message\":\"120.132.77.252 - - [02/Mar/2015:10:54:32 +0800] \\\"GET http://www.ly.com/ HTTP/1.1\\\" 403 202\",\"@version\":\"1\",\"@timestamp\":\"2015-07-14T17:37:04.383Z\",\"host\":\"localhost.localdomain\",\"path\":\"/tmp/access.log\"}"
) "{\"message\":\"123.59.33.27 - - [02/Mar/2015:11:15:36 +0800] \\\"GET http://www.ly.com/ HTTP/1.1\\\" 403 202\",\"@version\":\"1\",\"@timestamp\":\"2015-07-14T17:37:04.386Z\",\"host\":\"localhost.localdomain\",\"path\":\"/tmp/access.log\"}"
) "{\"message\":\"1.161.59.46 - - [02/Mar/2015:14:19:19 +0800] \\\"CONNECT mx2.mail2000.com.tw:25 HTTP/1.0\\\" 405 225\",\"@version\":\"1\",\"@timestamp\":\"2015-07-14T17:37:04.387Z\",\"host\":\"localhost.localdomain\",\"path\":\"/tmp/access.log\"}"
) "{\"message\":\"59.108.122.184 - - [29/Apr/2015:14:33:19 +0800] \\\"GET http://www.example.com/ HTTP/1.1\\\" 403 202\",\"@version\":\"1\",\"@timestamp\":\"2015-07-14T17:37:04.387Z\",\"host\":\"localhost.localdomain\",\"path\":\"/tmp/access.log\"}"
) "{\"message\":\"\",\"@version\":\"1\",\"@timestamp\":\"2015-07-14T17:37:04.388Z\",\"host\":\"localhost.localdomain\",\"path\":\"/tmp/access.log\"}"

## 很明显获取到了数据,这说明:客户端保存数据到服务端的 Redis 环节没有问题

3、安装、配置、启动 Elasticsearch

shell > cd /usr/local/src

shell > wget https://download.elastic.co/elasticsearch/elasticsearch/elasticsearch-1.6.0.tar.gz

shell > mv elasticsearch-1.6. /usr/local/elasticsearch

shell > vim /usr/local/elasticsearch/config/elasticsearch.yml

cluster.name: my_es
node.name: "Master"

## cluster.name 集群名称,局域网内只要这个名称相同,那么就可以自动组成一个集群
## nod.name 节点名称
## 这些都是可以不用修改的,采用默认参数即可

shell > vim /usr/local/elasticsearch/bin/elasticsearch.in.sh

if [ "x$ES_MIN_MEM" = "x" ]; then
ES_MIN_MEM=64m
fi
if [ "x$ES_MAX_MEM" = "x" ]; then
ES_MAX_MEM=128m
fi

## 这里面需要注意一下,根据实际情况修改 Elasticsearch 可以使用的最大、小内存

shell > /usr/local/elasticsearch/bin/elasticsearch -d

## -d 后台启动,关闭命令:curl -X POST 127.0.0.1:9200/_shutdown
## 默认 HTTP 监听端口是 9200 ,可以通过 web 访问、也可以使用 curl 工具等

shell > curl -X GET 127.0.0.1:
{
"status" : ,
"name" : "master",
"cluster_name" : "my_es",
"version" : {
"number" : "1.6.0",
"build_hash" : "cdd3ac4dde4f69524ec0a14de3828cb95bbb86d0",
"build_timestamp" : "2015-06-09T13:36:34Z",
"build_snapshot" : false,
"lucene_version" : "4.10.4"
},
"tagline" : "You Know, for Search"
}

## 一些输出的状态信息,状态码、节点名、集群名、版本信息等等

shell > curl -X GET 127.0.0.1:/_cat/nodes?v
host ip heap.percent ram.percent load node.role master name
localhost.localdomain 127.0.0.1 2.07 d * master

## 搜索节点信息

4、安装、配置、启动 Logstash

## 安装跟客户端一样即可( 参考上面部分 )

shell > vim /usr/local/logstash/logstash.conf

# Logstash.conf

input {
redis {
host => '127.0.0.1'
port => ''
data_type => 'list'
key => 'logstash-list'
}
} output {
elasticsearch {
host => '127.0.0.1'
port => ''
protocol => 'http'
}
}

## 服务端配置 Logstash 从本机的 Redis 取数据,存放到本机的 Elasticsearch

shell > /usr/local/logstash/bin/logstash -f /usr/local/logstash/logstash.conf &

5、测试二

shell > curl -X GET 127.0.0.1:/_cat/indices?v
health status index pri rep docs.count docs.deleted store.size pri.store.size
yellow open logstash-2015.07. .1kb .1kb

## 可以看到已经有索引,名为 logstash-2015.07.14

shell > curl -X GET 127.0.0.1:/logstash-2015.07.

## 可以这样简单查询一下具体数据

6、Kibana 展示阶段( K4 )

shell > cd /usr/local/src

shell > wget https://download.elastic.co/kibana/kibana/kibana-4.1.1-linux-x64.tar.gz

shell > tar zxf kibana-4.1.-linux-x64.tar.gz

shell > mv kibana-4.1.-linux-x64 /usr/local/kibana

shell > /usr/local/kibana > /usr/local/kibana/kibana.log &

## 好了,这样就算是启动成功了
## 默认监听 5601 端口,可以直接访问 http://192.168.214.20:5601

## 这部分内容其实挺多的,要想玩好这个,得单独去研究 Logstash 、Elasticsearch 、Kibana 这三样东西,先这样吧!( 感觉好难哦,到现在连个皮毛都没学会,丢人 )

## 参考文档:http://kibana.logstash.es/content/index.html
## https://github.com/logstash-plugins/logstash-patterns-core/tree/master/patterns

ELK 日志管理系统,初次尝试记录的更多相关文章

  1. ELK 日志管理系统,再次尝试记录

    简介: 第二次尝试 ELK 记录... 工作流程: 1.客户端的 Logstash 将日志信息采集到之后传输给 Redis 做消息队列 2.然后服务端的 Logstash 将日志从 Redis 中取出 ...

  2. Zookeeper协调服务系统·ELK日志管理系统简介

    Zookeeper协调服务系统: 说明:它分布式系统中的协调服务系统,是Hadoop下的一个子项目,可提供的服务有:名字服务.配置服务.分布式同步.组服务等. 3个角色:Leaders.Follow. ...

  3. 170228、Linux操作系统安装ELK stack日志管理系统--(1)Logstash和Filebeat的安装与使用

    安装测试环境:Ubuntu 16.04.2 LTS 前言 (1)ELK是Elasticsearch,Logstash,Kibana 开源软件的集合,对外是作为一个日志管理系统的开源方案.它可以从任何来 ...

  4. 孤荷凌寒自学python第五十二天初次尝试使用python读取Firebase数据库中记录

    孤荷凌寒自学python第五十二天初次尝试使用python读取Firebase数据库中记录 (完整学习过程屏幕记录视频地址在文末) 今天继续研究Firebase数据库,利用google免费提供的这个数 ...

  5. 离线部署ELK+kafka日志管理系统【转】

    转自 离线部署ELK+kafka日志管理系统 - xiaoxiaozhou - 51CTO技术博客http://xiaoxiaozhou.blog.51cto.com/4681537/1854684 ...

  6. Centos7 之安装Logstash ELK stack 日志管理系统

    一.介绍 The Elastic Stack - 它不是一个软件,而是Elasticsearch,Logstash,Kibana 开源软件的集合,对外是作为一个日志管理系统的开源方案.它可以从任何来源 ...

  7. CentOS 7下安装Logstash ELK Stack 日志管理系统(上)

    介绍 The Elastic Stack - 它不是一个软件,而是Elasticsearch,Logstash,Kibana 开源软件的集合,对外是作为一个日志管理系统的开源方案.它可以从任何来源,任 ...

  8. ELK日志框架(2):log4net.ElasticSearch+ Kibana实现日志记录和显示

    环境说明 1. windows server 2012 R2 64位 2. log4net.ElasticSearch 3. kibana-5.5.0-windows-x86.zip 架构说明 数据采 ...

  9. 日志管理系统ELK6.2.3

    https://www.jianshu.com/p/88f2cbedcc2a 写在前面 刚毕业工作的时候,处理日志喜欢自己写脚本抓取数据分析日志,然后在zabbix上展示出来.但是开发要看日志的时候, ...

随机推荐

  1. POJ1733 Parity game 【带权并查集】*

    POJ1733 Parity game Description Now and then you play the following game with your friend. Your frie ...

  2. BZOJ2005 NOI2010 能量采集 【莫比乌斯反演】

    BZOJ2005 NOI2010 能量采集 Description 栋栋有一块长方形的地,他在地上种了一种能量植物,这种植物可以采集太阳光的能量.在这些植物采集能量后,栋栋再使用一个能量汇集机器把这些 ...

  3. (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切

    if (this == null) Console.WriteLine("this is null"); 这句话一写,大家一定觉得荒谬,然而 if 内代码的执行却是可能的!本文讲介 ...

  4. FirstTry_HelloWorld

    #include <qapplication.h> #include <qpushbutton.h> int main( int argc, char **argv ) { Q ...

  5. PHP 5.5.38 + mysql 5.0.11 + zabbix3.0 + nginx 安装

    PHP 5.5.38 + mysql 5.0.11 + zabbix3.0 + nginx 1.首先在安装好环境下安装 zabbix3.0情况下 2. yum install mysql-devel ...

  6. simulink中几个bit型操作模型

    bit concat  将两个fix point 数据 结合到一块. bit rotate 循环移位 bit shift 移位 又分逻辑移位和算术移位,逻辑移位不管最高位0或1,统统移0,算术移位会移 ...

  7. ballerina 学习三 根据swagger 以及protobuf 生成code

    备注: 基本环境安装就不用介绍了,swagger 以及grpc 同时也不用介绍了,都是比较简单的代码,就是一个简单的测试 1.   初始化项目 ballerina init 项目结构如下: ├── R ...

  8. Nomad 了解

    Introduction to Nomad Welcome to the intro guide to Nomad! This guide is the best place to start wit ...

  9. flash无法导入mp3文件

    用全能音频转换通转换下,一切采用默认即可,点击下载地址 这个软件真心好用. 把mp3拖入其中,点击批量转换,参数默认,即可.

  10. RabbitMQ概念

    RabbitMQ 即一个消息队列,_主要是用来实现应用程序的异步和解耦,同时也能起到消息缓冲,消息分发的作用._RabbitMQ使用的是AMQP协议,它是一种二进制协议.默认启动端口 5672. 在 ...