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

简介:

第二次尝试 ELK 记录...

工作流程:

1、客户端的 Logstash 将日志信息采集到之后传输给 Redis 做消息队列
2、然后服务端的 Logstash 将日志从 Redis 中取出之后根据日志规则将数据序列化( 方便查询 )完成后存入 Elasticsearch 文本数据库中
3、最后通过 Kibana 展示数据,可以根据序列化好的数据做查询过滤、数据聚合等操作

环境描述:

192.168.214.20 服务端( Logstash 、Elasticsearch 、Redis 、Nginx 、Kibana4 )
192.168.214.30 客户端( Logstash )

一、客户端操作

shell > yum -y install java

1、安装 Logstash

shell > cd /usr/local/src ; wget https://download.elastic.co/logstash/logstash/logstash-1.5.2.tar.gz
shell > tar zxf logstash-1.5.2.tar.gz
shell > mv logstash-1.5.2 /usr/local/logstash

2、编写配置文件

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

# Logstash.conf

input {
  file {
    type => "apache_access"
    path => ["/tmp/access.log"]
    start_position => "beginning"
  }
}

output {
#  stdout {
#    codec => rubydebug
#  }
  redis {
      host => "192.168.214.20"
      port => 6379
      data_type => "list"
      key => "logstash-redis"
  }
}

## input 段定义从哪里采集日志,beginning 代表服务启动时从日志文件头部开始导入日志,而不是监听新生成的日志( 当然导入完成也会变成监听新生成的日志 )
## output 段定义将日志数据输送到指定的 Redis 服务中,类型为 list ,key 为 logstash-redis
## stdout 段是为了简单验证有没有采集到日志数据( 效果:会在终端输出日志信息,rubydebug 为输出格式,可以不设置 codec 看看有什么区别 )

3、检查配置文件

shell > /usr/local/logstash/bin/logstash -f /usr/local/logstash/logstash.conf -t
Configuration OK

## 启动前先检查一下配置文件是否正确
## OK ,客户端配置完毕,暂时不启动( 因为服务端的 Redis 服务还没有,现在启动会报错:传输失败 )

二、服务端操作

1、安装 Elasticsearch

shell > cd /usr/local/src ; wget https://download.elastic.co/elasticsearch/elasticsearch/elasticsearch-1.6.0.tar.gz
shell > tar zxf elasticsearch-1.6.0.tar.gz
shell > mv elasticsearch-1.6.0 /usr/local/elasticesearch

2、配置 Elasticsearch

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

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

## cluster.name 集群名称,局域网内只要这个名称相同,那么就可以自动组成一个集群
## nod.name 节点名称
## 这些都是可以不用修改的,采用默认参数即可( 要知道,Elasticsearch 是一个数据库,所以功能远远不止这些 )

shell > vim /usr/local/elasticesearch/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=256m

## Elasticsearch 可用的最大、最小内存数( 根据实际情况来吧 )

3、启动 Elasticsearch

shell > /usr/local/elasticesearch/bin/elasticsearch -d
shell > netstat -anpt | grep 9200
tcp        0      0 :::9200                     :::*                        LISTEN      1263/java

## -d 后台运行,默认监听 TCP 9200 端口

shell > curl -X GET 127.0.0.1:9200
{
  "status" : 200,
  "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:9200/_cat
=^.^=
/_cat/allocation
/_cat/shards
/_cat/shards/{index}
/_cat/master
/_cat/nodes
/_cat/indices
/_cat/indices/{index}
/_cat/segments
/_cat/segments/{index}
/_cat/count
/_cat/count/{index}
/_cat/recovery
/_cat/recovery/{index}
/_cat/health
/_cat/pending_tasks
/_cat/aliases
/_cat/aliases/{alias}
/_cat/thread_pool
/_cat/plugins
/_cat/fielddata
/_cat/fielddata/{fields}

## 怎么说呢,所支持的一些指令吧

shell > curl -X GET 127.0.0.1:9200/_cat/master
6LEg6Ap4Qq-9HYUbEoy9Bw localhost.localdomain 127.0.0.1 Master

## 例如查看 master 信息

shell > curl -X GET 127.0.0.1:9200/_cat/master?v
id                     host                  ip        node
6LEg6Ap4Qq-9HYUbEoy9Bw localhost.localdomain 127.0.0.1 Master

## 结尾加了 ?v 可以显示各字段意思

4、Elasticsearch 安装插件

shell > /usr/local/elasticesearch/bin/plugin -i mobz/elasticsearch-head

## 可以使用 plugin 命令跟 -i 参数,自动下载并安装插件
## 如果因网络问题不能这样安装时,可以将插件包手动下载到机器上,使用 ./plugin -u file:///usr/local/src/插件包.zip -i head 这样安装

shell > /usr/local/elasticesearch/bin/plugin -l
Installed plugins:
    - head

## 使用 -l 可以列出已经安装过的插件
## 访问 URL : http://192.168.214.20:9200/_plugin/head 查看插件页面,记得防火墙开启 TCP 9200 端口

shell > /usr/local/elasticesearch/bin/plugin -i lukas-vlcek/bigdesk

## 这是一个用来监控集群状态的插件,如: CPU 、内存 、索引数据、搜索情况、HTTP 连接数等
## 手动下载时,例如第一个插件的地址就是 https://github.com/mobz/elasticsearch-head

5、Redis

shell > cd /usr/local/src ; wget http://download.redis.io/releases/redis-3.0.2.tar.gz
shell > tar zxf redis-3.0.2.tar.gz
shell > cd redis-3.0.2 ; make ; make install
shell > mkdir /usr/local/redis
shell > cp /usr/local/src/redis-3.0.2/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 已经启动成功,记得防火墙开放 TCP 6379 端口,不然客户端收集到的日志信息传输不过来

6、先来个小测试

1> 客户端启动 Logstash

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

2> 客户端导入日志( 找线上的日志导入到本地指定的日志文件中 )

3> 服务端查看 Redis 能否接收到数据

shell > redis-cli
127.0.0.1:6379> keys *
1) "logstash-redis"

## 可以看到有一个名为 logstash-redis 的 key( 正是客户端定义的 key )

127.0.0.1:6379> lrange logstash-redis 0 -1
 1) "{\"message\":\"121.42.0.30 - - [17/Jul/2015:18:01:21 +0800] \\\"POST /include/fckeditor/editor/filemanager/browser/default/connectors/asp/connector.asp?Command=FileUpload&Type=File&CurrentFolder=%2F HTTP/1.1\\\" 404 279\",\"@version\":\"1\",\"@timestamp\":\"2015-07-20T15:31:46.914Z\",\"host\":\"localhost.localdomain\",\"path\":\"/tmp/access.log\",\"type\":\"apache_access\"}"
 2) "{\"message\":\"121.42.0.30 - - [17/Jul/2015:18:01:23 +0800] \\\"POST /plugins/fckeditor/editor/filemanager/browser/default/connectors/asp/connector.asp?Command=FileUpload&Type=File&CurrentFolder=%2F HTTP/1.1\\\" 404 279\",\"@version\":\"1\",\"@timestamp\":\"2015-07-20T15:31:46.941Z\",\"host\":\"localhost.localdomain\",\"path\":\"/tmp/access.log\",\"type\":\"apache_access\"}"

## 使用指令查看这个 key 中的数据,0 -1 表示从头到尾全部查看,最终发现有 89 条数据
## 而此时在客户端上执行 wc -l < /tmp/access.log 发现得到的结果也是 89 条,说明数据传输没有问题

7、Logstash

## 安装方式跟客户端一样,只是配置文件有所不同而已

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

# Logstash.conf

input {
  redis {
    host => "127.0.0.1"
    port => 6379
    data_type => "list"
    key => "logstash-redis"
    type => "redis-input"
  }
}

filter {
  grok {
    match => { "message" => "%{IPORHOST:client_ip} %{USER:ident} %{USER:auth} \[%{HTTPDATE:timestamp}\] \"(?:%{WORD:verb} %{NOTSPACE:request}(?: HTTP/%{NUMBER:http_version})?|%{DATA:raw_request})\" %{NUMBER:response} (?:%{NUMBER:bytes}|-)" }
  }
}

output {
  stdout {
    codec => rubydebug
}

#  elasticsearch {
#    host => "127.0.0.1"
#    port => 9200
#    protocol => ‘http‘
#  }
}

## input 段定义从 Redis 中取数据
## output 段定义将序列化好的数据写入本机的 Elasticsearch 中( 上面注释掉是为了查看规则是否匹配成功 )
## filter 段定义将取出的数据序列化( 根据日志格式编写匹配规则 )

141.212.122.34 - - [18/Jul/2015:14:54:51 +0800] "GET /x HTTP/1.1" 400 226

## 这是我的日志格式,非常简单,匹配规则每个 %{} 对应一个字段,要完全匹配才会出结果,否则匹配失败
## 编写规则时可以根据这里的定义自由组合,地址:https://github.com/logstash-plugins/logstash-patterns-core/blob/master/patterns/grok-patterns
## 上面的一长串其实直接定义为 match => { "%{COMMONAPACHELOG}" } 即可,单独写出来是为了记录自由组合时格式是怎么样的

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

## 配置文件没有问题,那么就启动

{
         "message" => "121.42.0.30 - - [17/Jul/2015:18:02:47 +0800] \"GET /phpMyAdmin/scripts/setup.php HTTP/1.1\" 404 226",
        "@version" => "1",
      "@timestamp" => "2015-07-20T15:31:47.963Z",
            "host" => "localhost.localdomain",
            "path" => "/tmp/access.log",
            "type" => "apache_access",
       "client_ip" => "121.42.0.30",
           "ident" => "-",
            "auth" => "-",
       "timestamp" => "17/Jul/2015:18:02:47 +0800",
            "verb" => "GET",
         "request" => "/phpMyAdmin/scripts/setup.php",
    "http_version" => "1.1",
        "response" => "404",
           "bytes" => "226"
}

## 截取一段输出信息来看,日志中的各项指标都匹配到了,说明规则没有问题
## 那么接下来就可以将 stdout 段注释掉,将 Elasticsearch 段注释取消,将结果写到 Elasticsearch 中了( 修改配置文件要重启服务,这个不用多说 )

shell > curl -X GET 127.0.0.1:9200/_cat/indices

## 重启完服务查看 Elasticsearch 中有没有索引时,发现是空的!
## 这是正常现象,如果你现在去看 Redis 时,就会发现也是空值,因为 Redis 作为消息队列,Logstash 读取完( 拿走 ) Redis 中的数据,Redis 自然就成了空值。
## 再次导入一些日志信息测试

shell > curl -X GET 127.0.0.1:9200/_cat/indices
yellow open logstash-2015.07.20 5 1 31 0 49.4kb 49.4kb

## 可以看到 Elasticsearch 已经生成了索引( 有数据了 )

shell > curl -X GET 127.0.0.1:9200/_cat/shards?v
index               shard prirep state      docs  store ip        node
logstash-2015.07.20 2     p      STARTED       7   10kb 127.0.0.1 Master
logstash-2015.07.20 2     r      UNASSIGNED
logstash-2015.07.20 0     p      STARTED       6 10.2kb 127.0.0.1 Master
logstash-2015.07.20 0     r      UNASSIGNED
logstash-2015.07.20 3     p      STARTED       6  9.6kb 127.0.0.1 Master
logstash-2015.07.20 3     r      UNASSIGNED
logstash-2015.07.20 1     p      STARTED       7 10.1kb 127.0.0.1 Master
logstash-2015.07.20 1     r      UNASSIGNED
logstash-2015.07.20 4     p      STARTED       5  9.3kb 127.0.0.1 Master
logstash-2015.07.20 4     r      UNASSIGNED

## 这样再来看看,更清楚了

8、Kibana

shell > cd /usr/local/src ; wget https://download.elastic.co/kibana/kibana/kibana-4.1.1-linux-x64.tar.gz
shell > tar zxf kibana-4.1.1-linux-x64.tar.gz
shell > mv kibana-4.1.1-linux-x64 /usr/local/kibana
shell > vim /usr/local/kibana/config/kibana.yml

elasticsearch_url: "http://127.0.0.1:9200"

## 这里也没什么需要改的,确认一下从哪读取数据

shell > /usr/local/kibana/bin/kibana > /usr/local/kibana/kibana.log &
netstat -anpt | grep 5601
tcp        0      0 0.0.0.0:5601                0.0.0.0:*                   LISTEN      1881/node

## 启动服务,默认监听 TCP 5601 端口,防火墙怎么做不用说了吧
## 访问 URL : http://192.168.214.20:5601

> 第一次访问要求创建一个索引( 没有导入日志是不能创建索引的 ),可以使用默认的 logstash-* ,也可以使用事件时间来创建索引( 能用时间匹配的情况下 )
> 接下来就可以查看日志信息了,第一个界面简单展示,第二个界面可以创建图表,第三个界面可以将创建好的多个图表放在一起,第四个界面是配置页,创建索引就在这里

## 头次浏览可能会提示搜索不到信息,在右上角选择合适的时间区间应该就可以了

时间: 2024-11-08 17:21:46

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

ELK 日志管理系统,初次尝试记录

简介: ELK 是一套开源的日志管理平台,主要包括三个组件,可以用于日志的收集.分析.存储和展示工作. ELK 成员:Elasticsearch .Logstash .Kibana( K4 ) ELK 平台特性: 1.处理方式灵活,Elasticsearch 采用实时全文索引,不需要像 storm 一样预先编程才能使用 2.配置简单.易上手,Elasticsearch 全部采用 Json 接口:Logstash 是 Ruby DSL 设计,都是业界最通用的配置语法设计 3.检索性能高效,虽然每次

elk日志收集平台搭建记录

ELK是指Elasticsearch + Logstash + Kibaba三个组件的组合. Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等. Logstash是一个完全开源的工具,他可以对你的日志进行收集.过滤,并将其存储供以后使用(如,搜索). Kibana 也是一个开源和免费的工具,它Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的

ELK日志管理

ELK日志管理 ·        1.简介 ·        2.依赖组件 ·        3.下载 ·        4.安装步骤 o   4.1 安装redis o   4.2 ElasticSearch安装 o   4.3 LogStash安装 o   4.4 Kibana安装 ·        5.使用说明 o   5.1 ElasticSearch o   5.2 Kibana 1.简介 ELK日志管理系统主要功能:应用系统日志的分析和监控 . ELK组成:ElasticSearch

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

一.介绍 The Elastic Stack - 它不是一个软件,而是Elasticsearch,Logstash,Kibana 开源软件的集合,对外是作为一个日志管理系统的开源方案.它可以从任何来源,任何格式进行日志搜索,分析获取数据,并实时进行展示.像盾牌(安全),监护者(警报)和Marvel(监测)一样为你的产品提供更多的可能. Elasticsearch:搜索,提供分布式全文搜索引擎 Logstash: 日志收集,管理,存储 Kibana :日志的过滤web 展示 Filebeat:监控

离线部署ELK+kafka日志管理系统

1.简介 对于日志来说,最常见的需求就是收集.查询.显示,正对应logstash.elasticsearch.kibana的功能. ELK日志系统在系统中,主要可解决的问题: 基于日志的数据挖掘 问题排查,上线检查 根据关键字查询日志详情 异常数据自动触发消息通知 服务器监控,应用监控,Bug管理 统计分析,比如接口的调用次数.执行时间.成功率等 性能分析,用户行为分析,安全漏洞分析,时间管理 Logstash: Logstash是一个用来搜集.分析.过滤日志的工具.它支持几乎任何类型的日志,包

ELK日志管理平台部署简介

ELK是对Elasticsearch.Logstash.Kibana整合平台的简称.在日常的运维工作中,要实时监控服务器的业务.系统和硬件状态,除了使用监控之外,还需要搜集大量的日志来进行分析.但是在面对海量的服务器和集群时,通过单台登录查询的方式显然是不可能的,对于不同时间段和集群日志的分析仅仅通过简单的脚本来统计也是难以实现.ELK日志平台通过日志搜集,查询检索和前端展示的方式帮我们实现了这样的功能. Elasticsearch是个开源分布式搜索引擎,具有分布式,零配置,自动发现,索引自动分

极速赛车平台出租与ELK日志分析平台

什么是ELK呢?极速赛车平台出租 Q2152876294 论坛:diguaym.com ELK是三个组件的缩写, 分别是elasticsearch, logstash, kibana. ELK平台可以用于实现日志收集.日志搜索和日志分析 1.elasticsearch(es): 它是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等. 2.logstash: 简单说是一个日志收集工具, 可以定义从哪里获取数据,

ELK日志框架(1):安装Elasticsearch组建单服务器多节点集群

原文:ELK日志框架(1):安装Elasticsearch组建单服务器多节点集群 ELK简介 最近有个需求搭建一套日志系统用于集成几个业务系统的日志提供快速的检索功能,目前是用Log4net存数据库+Error级别发邮件方式,也算简单暴力好用,但历史日志的模糊查询确实很慢,所以使用ELK是比较理想的解决方案.三年前写过两篇文章log4net.NoSql +ElasticSearch 实现日志记录和log4net.redis+logstash+kibana+elasticsearch+redis

centos 7搭建ELK日志分析系统

一.ELK的组成 ELK由ElasticSearch.Logstash和Kiabana三个开源工具组成,其官方网站为https://www.elastic.co/cn Elasticsearch:是个开源分布实时分析搜索引擎,建立在全文搜索引擎库Apache Lucens基础上,同时隐藏了Apache Luces的复杂性.Elasticsearch将所有的功能打包成一个独立的服务,并提供了一个简单的RESTful API接口,它具有分布式.零配置.自动发现.索引自动分片.索引副本机制.RESTf