简介:

第二次尝试 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.confinput {file {type => "apache_access"path => ["/tmp/access.log"]start_position => "beginning"}
}output {
#  stdout {
#    codec => rubydebug
#  }redis {host => "192.168.214.20"port => 6379data_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.ymlcluster.name: my_es
node.name: "Master"

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

shell > vim /usr/local/elasticesearch/bin/elasticsearch.in.shif [ "x$ES_MIN_MEM" = "x" ]; thenES_MIN_MEM=64m
fi
if [ "x$ES_MAX_MEM" = "x" ]; thenES_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 -11) "{\"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.confinput {redis {host => "127.0.0.1"port => 6379data_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.ymlelasticsearch_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-* ,也可以使用事件时间来创建索引( 能用时间匹配的情况下 )
> 接下来就可以查看日志信息了,第一个界面简单展示,第二个界面可以创建图表,第三个界面可以将创建好的多个图表放在一起,第四个界面是配置页,创建索引就在这里

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

转载于:https://www.cnblogs.com/wangxiaoqiangs/p/5798565.html

ELK 日志管理系统,再次尝试记录相关推荐

  1. ELK日志管理系统的搭建

    ELK日志管理系统的搭建 环境准备 Linux安装Elasticsearch 使用的 Elasticsearch的版本是7.6.2.Elasticsearch7.x要求 Linux内核必须是4+版本以 ...

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

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

  3. 超详细部署ELK日志分析系统!每一步骤都有记录!ELK的详细使用!

    目录 一.ELK简介 二.Elasticsearch简介 三.Logstash简介 四.Kibana简介 五.ELK案例部署 5.1 案例环境 5.2 部署elasticsearch 5.3 部署Ap ...

  4. ELK——企业级日志管理系统

    目录 1.ELK介绍 2.为什么要使用 ELK 3.完整日志系统的基本特征 4.ELK工作原理 5.部署ELK 5.1 安装elasticsearch 5.2 安装可视化插件 5.3 安装logsta ...

  5. ELK日志中心集群,看完工资+1k

    目录 一.ELK日志分析集群 1.组件介绍 (1)Elasticsearch: (2)Logstash: (3)kibana : (4)kafka:(kafka集群+elk) (5)Filebeat: ...

  6. 创业公司如何做数据分析(四)ELK日志系统

    作为系列文章的第四篇,本文将重点探讨数据采集层中的ELK日志系统.日志,指的是后台服务中产生的log信息,通常会输入到不同的文件中,比如Django服务下,一般会有nginx日志和uWSGI日志.这些 ...

  7. 搭建ELK日志分析平台(上)—— ELK介绍及搭建 Elasticsearch 分布式集群

    笔记内容:搭建ELK日志分析平台(上)-- ELK介绍及搭建 Elasticsearch 分布式集群 笔记日期:2018-03-02 27.1 ELK介绍 27.2 ELK安装准备工作 27.3 安装 ...

  8. 搭建ELK日志分析平台(下)—— 搭建kibana和logstash服务器

    27.6 安装kibana 27.7 安装logstash 27.8 配置logstash 27.9 kibana上查看日志 27.10 收集nginx日志 27.11 使用beats采集日志 本文是 ...

  9. 搭建ELK日志分析系统详解

    日志分析是运维工程师解决系统故障.发现问题的主要手段.日志包含多种类型,包括程序日志.系统日志以及安全日志等.通过对日志的分析,既可以做到未雨绸缪.预防故障的发生,又可以在故障发生时,寻找蛛丝马迹.快 ...

最新文章

  1. 嘿,程序员,你该学点经济学了!
  2. TensorFlow 2.4来了!
  3. windows2003前言
  4. 使用C语言进行面向对象的开发--GObject入门[2]
  5. office数据集dslr_如何将照片从DSLR无线传输到智能手机
  6. 24、mysql连接线程的show和kill
  7. 2分钟 Docker 部署 SprinBoot 集成 Flowable 工作流引擎
  8. php图片中不显示文字内容,水印效果 只有图片,文字不显示
  9. c++ 构造函数数组_“动态数组”的设计与实现
  10. 【智能路由器】轻量级web服务器lighttpd架设——打造家庭影院
  11. 萤石云全栈开放,亿级终端背后的萤石云平台突显硬核“软”实力
  12. 2.3 常用导数公式及推导
  13. Flutter学习之Dart语言基础(内置类型)
  14. Learning to Rank 简介(转载)
  15. 阿里巴巴倡导的数据中台,到底是什么东东
  16. 影院服务器linux系统怎么安装,私人家庭影院之路 - 篇一:服务器安装Rutorrent(PT盒子)Seedbox教程...
  17. 最长公共子序列问题——LCS算法
  18. tableau desktop 10.3 使用时间驻留器失败
  19. 合作升级!阿里宣布入股哔哩哔哩2400万股,占比8%
  20. 怎样用ZBrush快速雕刻皮肤纹理

热门文章

  1. CAD2019软件安装教程
  2. 在显著性区域外画矩形框matlab,Matlab实验报告样板
  3. 计算机硬件市场调查清单,微型计算机组装与维护实用教程王际川第8章节组装计算机.ppt...
  4. android 线性布局 底部,java – 如何在android线性布局中对齐父底部?
  5. 目录config.php怎么修改域名,config.php · wlphp/基于宝塔面板api给站点新增删除域名接口 - Gitee.com...
  6. 在HTML中将垂直转换为平行,大物实验答案
  7. java创建oracle序列_java学习:Hibernate学习-用oracle sequence序列生成ID的配置示例
  8. linux 搭建jenkins
  9. apidoc学习(接口文档定义取代word)
  10. centos6.8防火墙模块未加载