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.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 日志管理系统,再次尝试记录相关推荐
- ELK日志管理系统的搭建
ELK日志管理系统的搭建 环境准备 Linux安装Elasticsearch 使用的 Elasticsearch的版本是7.6.2.Elasticsearch7.x要求 Linux内核必须是4+版本以 ...
- CentOS 7下安装Logstash ELK Stack 日志管理系统(上)
介绍The Elastic Stack - 它不是一个软件,而是Elasticsearch,Logstash,Kibana 开源软件的集合,对外是作为一个日志管理系统的开源方案.它可以从任何来源,任何 ...
- 超详细部署ELK日志分析系统!每一步骤都有记录!ELK的详细使用!
目录 一.ELK简介 二.Elasticsearch简介 三.Logstash简介 四.Kibana简介 五.ELK案例部署 5.1 案例环境 5.2 部署elasticsearch 5.3 部署Ap ...
- ELK——企业级日志管理系统
目录 1.ELK介绍 2.为什么要使用 ELK 3.完整日志系统的基本特征 4.ELK工作原理 5.部署ELK 5.1 安装elasticsearch 5.2 安装可视化插件 5.3 安装logsta ...
- ELK日志中心集群,看完工资+1k
目录 一.ELK日志分析集群 1.组件介绍 (1)Elasticsearch: (2)Logstash: (3)kibana : (4)kafka:(kafka集群+elk) (5)Filebeat: ...
- 创业公司如何做数据分析(四)ELK日志系统
作为系列文章的第四篇,本文将重点探讨数据采集层中的ELK日志系统.日志,指的是后台服务中产生的log信息,通常会输入到不同的文件中,比如Django服务下,一般会有nginx日志和uWSGI日志.这些 ...
- 搭建ELK日志分析平台(上)—— ELK介绍及搭建 Elasticsearch 分布式集群
笔记内容:搭建ELK日志分析平台(上)-- ELK介绍及搭建 Elasticsearch 分布式集群 笔记日期:2018-03-02 27.1 ELK介绍 27.2 ELK安装准备工作 27.3 安装 ...
- 搭建ELK日志分析平台(下)—— 搭建kibana和logstash服务器
27.6 安装kibana 27.7 安装logstash 27.8 配置logstash 27.9 kibana上查看日志 27.10 收集nginx日志 27.11 使用beats采集日志 本文是 ...
- 搭建ELK日志分析系统详解
日志分析是运维工程师解决系统故障.发现问题的主要手段.日志包含多种类型,包括程序日志.系统日志以及安全日志等.通过对日志的分析,既可以做到未雨绸缪.预防故障的发生,又可以在故障发生时,寻找蛛丝马迹.快 ...
最新文章
- 嘿,程序员,你该学点经济学了!
- TensorFlow 2.4来了!
- windows2003前言
- 使用C语言进行面向对象的开发--GObject入门[2]
- office数据集dslr_如何将照片从DSLR无线传输到智能手机
- 24、mysql连接线程的show和kill
- 2分钟 Docker 部署 SprinBoot 集成 Flowable 工作流引擎
- php图片中不显示文字内容,水印效果 只有图片,文字不显示
- c++ 构造函数数组_“动态数组”的设计与实现
- 【智能路由器】轻量级web服务器lighttpd架设——打造家庭影院
- 萤石云全栈开放,亿级终端背后的萤石云平台突显硬核“软”实力
- 2.3 常用导数公式及推导
- Flutter学习之Dart语言基础(内置类型)
- Learning to Rank 简介(转载)
- 阿里巴巴倡导的数据中台,到底是什么东东
- 影院服务器linux系统怎么安装,私人家庭影院之路 - 篇一:服务器安装Rutorrent(PT盒子)Seedbox教程...
- 最长公共子序列问题——LCS算法
- tableau desktop 10.3 使用时间驻留器失败
- 合作升级!阿里宣布入股哔哩哔哩2400万股,占比8%
- 怎样用ZBrush快速雕刻皮肤纹理
热门文章
- CAD2019软件安装教程
- 在显著性区域外画矩形框matlab,Matlab实验报告样板
- 计算机硬件市场调查清单,微型计算机组装与维护实用教程王际川第8章节组装计算机.ppt...
- android 线性布局 底部,java – 如何在android线性布局中对齐父底部?
- 目录config.php怎么修改域名,config.php · wlphp/基于宝塔面板api给站点新增删除域名接口 - Gitee.com...
- 在HTML中将垂直转换为平行,大物实验答案
- java创建oracle序列_java学习:Hibernate学习-用oracle sequence序列生成ID的配置示例
- linux 搭建jenkins
- apidoc学习(接口文档定义取代word)
- centos6.8防火墙模块未加载