ELK-Stack 最后一次全篇文档
简介:
ELK-Stack 日志收集系统。最后一次全篇记录的笔记,之后关于 ELK 的笔记都将是片段型、针对性的。
环境介绍:
ELK-Stack:192.168.1.25 ( Redis、LogStash、Kibana )
ES-1: 192.168.1.26 ( ElasticSearch )
ES-2: 192.168.1.27 ( ElasticSearch )
Node: *.*.*.* ( LogStash )
工作流程:
1、Node:LogStash 收集日志发往 --> ELK-Stack:Redis
2、ELK-Stack:LogStash 将 Redis 消息队列中的数据取出发往 --> ElasticSearch
3、ELK-Stack:Kibana 去 ElasticSearch 读取数据并展示
# 接下来我们将按 ELK 工作流程来搭建并配置环境
一、Node:LogStash 客户端收集日志
shell > yum -y install java shell > cd /usr/local/src
shell > wget https://download.elastic.co/logstash/logstash/logstash-2.4.0.tar.gz
shell > tar zxf logstash-2.4..tar.gz
shell > mv logstash-2.4. ../; cd ~ shell > vim /usr/local/logstash-2.4./logstash.conf
# Logstash input {
file {
type => "nginx_access"
path => ["/tmp/access.log"]
start_position => "beginning"
}
} output {
stdout {
codec => rubydebug
}
}
# input 插件定义从哪里读取日志,output 插件定义将日志输出到哪里。
shell > /usr/local/logstash-2.4./bin/logstash -f /usr/local/logstash-2.4./logstash.conf -t # 测试配置文件正确
Configuration OK shell > /usr/local/logstash-2.4./bin/logstash -f /usr/local/logstash-2.4./logstash.conf & # 启动
# 进入测试阶段,导入一段日志文件,查看是否有输出
{
"message" => "125.118.134.85 - - [18/Sep/2016:14:06:58 +0800] \"POST / HTTP/1.0\" 200 8317 \"-\" \"-\" \"ptv.giv.tv\" \"-\" cid=3&tvtoken=78%3A0a%3Ac7%3A01%3A7b%3Ae1&year=0&tag=0&version=1.0&area=0&method=bftv.video.list&extend=isVip&sn=600000MW600T165J1764_5188&page=4&pageSize=20&apptoken=282340ce12c5e10fa84171660a2054f8&time=1474178818312&channel=0&hot=1&plateForm=bftv_android \"125.118.134.85\"",
"@version" => "",
"@timestamp" => "2016-09-18T06:07:30.425Z",
"path" => "/tmp/access.log",
"host" => "king",
"type" => "nginx_access"
}
{
"message" => "59.172.199.235 - - [18/Sep/2016:14:06:58 +0800] \"POST / HTTP/1.0\" 200 822 \"-\" \"-\" \"ptv.giv.tv\" \"-\" tvtoken=78%3A0a%3Ac7%3A04%3Aa9%3Ac0&version=1.0&method=bftv.tv.topicpiclist&sn=600000MW301D167B3808_214E&apptoken=282340ce12c5e10fa84171660a2054f8&time=1474178817053&plateForm=bftv_android \"59.172.199.235\"",
"@version" => "",
"@timestamp" => "2016-09-18T06:07:30.425Z",
"path" => "/tmp/access.log",
"host" => "king",
"type" => "nginx_access"
}
# 屏幕立即出现数据,说明客户端 LogStash 配置无误。
二、ELK-Stack:Redis 客户端将日志写入 Redis
shell > yum -y install gcc shell > cd /usr/local/src
shell > wget http://download.redis.io/releases/redis-3.2.3.tar.gz
shell > tar zxf redis-3.2..tar.gz
shell > cd redis-3.2.; make; make install shell > mkdir /usr/local/redis-3.2.; cp redis.conf ../../redis-3.2.; cd ~ shell > sed -i 's/bind 127.0.0.1/bind 127.0.0.1 192.168.1.25/' /usr/local/redis-3.2./redis.conf
shell > sed -i '/daemonize/s/no/yes/' /usr/local/redis-3.2./redis.conf
shell > sed -i 's#dir ./#dir /data/redis_data#' /usr/local/redis-3.2./redis.conf shell > redis-server /usr/local/redis-3.2./redis.conf shell > redis-cli ping
PONG
shell > redis-cli -h 192.168.1.25 ping
PONG
# 进入测试阶段,修改客户端 LogStash 配置文件,使其收集到的日志输出到该 Redis 中。
shell > vim /usr/local/logstash-2.4./logstash.conf # Logstash input {
file {
type => "nginx_access"
path => ["/tmp/access.log"]
start_position => "beginning"
}
} output {
# stdout {
# codec => rubydebug
# }
redis {
host => "192.168.1.25"
port =>
data_type => "list"
key => "logstash-list"
}
}
# 回到 ELK-Stack:Redis 上查看数据,结果为空... 问题不大,因为客户端 LogStash 上次读取的日志文件是输出到屏幕,而不是 Redis
shell > redis-cli
127.0.0.1:> keys *
(empty list or set)
# 重新导入一段日志测试
shell > redis-cli
127.0.0.1:> keys *
) "logstash-list"
# 再次查看,redis 中已经有数据了。可以证明,工作流程中第一步正常。
shell > lrange logstash-list
) "{\"message\":\"58.39.181.33 - - [18/Sep/2016:14:06:45 +0800] \\\"POST / HTTP/1.0\\\" 200 352 \\\"-\\\" \\\"-\\\" \\\"ptv.giv.tv\\\" \\\"-\\\" tvtoken=78%3A0a%3Ac7%3A01%3A49%3A97&requestplatform=4&version=1.0&method=core.pic.list&sn=600000MW300D165J0484_8B59&apptoken=282340ce12c5e10fa84171660a2054f8&type=10&time=1474178780284&plateForm=bftv_android \\\"58.39.181.33\\\"\",\"@version\":\"1\",\"@timestamp\":\"2016-09-18T06:37:46.961Z\",\"path\":\"/tmp/access.log\",\"host\":\"king\",\"type\":\"nginx_access\"}"
# key:logstash-list 中第一个值得信息如上,正式日志信息。
# 查看该 key 的所有值:lrange logstash-list 0 -1 ,发现第一个到最后一个总共有 110 条,然后 wc -l < /tmp/access.log 发现也是 110 条,证明数据无误。
三、ELK-Stash:LogStash 服务端 LogStash 从 Redis 读取数据并存入 ElasticSearch
shell > vim /usr/local/logstash-2.4./logstash.conf
# Logstash.conf input {
redis {
host => "127.0.0.1"
port =>
data_type => "list"
key => "logstash-list"
}
} output {
stdout {
codec => rubydebug
}
} shell > /usr/local/logstash-2.4./bin/logstash -f /usr/local/logstash-2.4./logstash.conf -t
Configuration OK shell > /usr/local/logstash-2.4./bin/logstash -f /usr/local/logstash-2.4./logstash.conf # 调试
# 再次追加日志,查看有无输出
"message" => "125.118.134.85 - - [18/Sep/2016:14:06:58 +0800] \"POST / HTTP/1.0\" 200 8317 \"-\" \"-\" \"ptv.giv.tv\" \"-\" cid=3&tvtoken=78%3A0a%3Ac7%3A01%3A7b%3Ae1&year=0&tag=0&version=1.0&area=ideo.list&extend=isVip&sn=600000MW600T165J1764_5188&page=4&pageSize=20&apptoken=282340ce12c5e10fa84171660a2054f8&time=1474178818312&channel=0&hot=1&plateForm=bftv_android \"125.",
"@version" => "",
"@timestamp" => "2016-09-18T08:36:11.621Z",
"path" => "/tmp/access.log",
"host" => "king",
"type" => "nginx_access"
}
{
"message" => "59.172.199.235 - - [18/Sep/2016:14:06:58 +0800] \"POST / HTTP/1.0\" 200 822 \"-\" \"-\" \"ptv.gv.tv\" \"-\" tvtoken=78%3A0a%3Ac7%3A04%3Aa9%3Ac0&version=1.0&method=bftv.tv.topicpicli01D167B3808_214E&apptoken=282340ce12c5e10fa84171660a2054f8&time=1474178817053&plateForm=bftv_android \"59.172.199.235\"",
"@version" => "",
"@timestamp" => "2016-09-18T08:36:11.622Z",
"path" => "/tmp/access.log",
"host" => "king",
"type" => "nginx_access"
}
# 至此,说明 ELK-Stack:LogStash 可以正常从 ELK-Stack:redis 读取数据,下面将读取到的数据写入到 ElasticSearch 。
# 注意:这只是个示例,将来还要将日志条目拆分,然后写入到 Kibana 才能更好的分析日志 ( filter )
# http://kibana.logstash.es/content/
shell > yum -y install java shell > cd /usr/local/src
shell > wget https://download.elastic.co/elasticsearch/release/org/elasticsearch/distribution/tar/elasticsearch/2.4.0/elasticsearch-2.4.0.tar.gz
shell > tar zxf elasticsearch-2.4..tar.gz
shell > mv elasticsearch-2.4. ../; cd ~ shell > useradd elast
shell > chown -R elast.elast /usr/local/elasticsearch-2.4. shell > vim /usr/local/elasticsearch-2.4./config/elasticsearch.yml # 编辑配置文件 cluster.name: my-elk # 集群名称 node.name: node- # 节点名称 path.data: /data/esearch/data # 数据存放路径
path.logs: /data/esearch/logs # 日志 network.host: 192.168.1.26 # 监听地址
http.port: # 监听端口 discovery.zen.ping.unicast.hosts: ["192.168.1.26", "192.168.1.27"] # 指定谁可以成为 Master ,如不指定无法加入到集群中 shell > mkdir -p /data/esearch/{data,logs}
shell > chown -R elast.elast /data/esearch shell > su - elast -c "/usr/local/elasticsearch-2.4.0/bin/elasticsearch -d" shell > echo 'su - elast -c "/usr/local/elasticsearch-2.4.0/bin/elasticsearch -d"' >> /etc/rc.local
# 简单测试 ElasticSearch
shell > curl -X GET 192.168.1.26:/_cat/nodes?v
host ip heap.percent ram.percent load node.role master name
192.168.1.26 192.168.1.26 0.10 d * node-
# 发现当前集群只有一个节点,名称为 node-1 ,角色为 master 。
# 好了,按照这个步骤开始安装下一台节点服务器。
# 注意:集群名称必须一致,节点名称必须不一致,防火墙开启 TCP 9200/9300,9300 用于节点间通信。
# node-2 安装略
shell > curl -X GET 192.168.1.27:/_cat/nodes?v
host ip heap.percent ram.percent load node.role master name
192.168.1.27 192.168.1.27 0.23 d m node-
192.168.1.26 192.168.1.26 0.04 d * node-
# 搭建好 node-2,再次查看节点信息,显示集群中有两个节点,node-1 角色为 master,node-2 角色 m 代表可以成为 master。
curl -X GET 192.168.1.26:/_cat/nodes?v
host ip heap.percent ram.percent load node.role master name
192.168.1.26 192.168.1.26 0.32 d * node-
192.168.1.27 192.168.1.27 0.06 d m node-
# 再次从 node-1 上查看节点信息,发现一致。
# 至此,ElasticSearch 集群安装完毕,默认 master 为 node-1,下面开始配置 LogStash 将数据存入 ElasticSearch 集群。
shell > vim /usr/local/logstash-2.4./logstash.conf output {
# stdout {
# codec => rubydebug
# }
elasticsearch {
hosts => ["192.168.1.26:9200"]
index => "logstash-%{type}-%{+YYYY.MM.dd}"
document_type => "%{type}"
workers =>
flush_size =>
idle_flush_time =>
template_overwrite => true
}
}
# 记得重启服务
# 再次追加日志,然后查看 ElasticSearch 索引信息
shell > curl -X GET 192.168.1.26:/_cat/indices
green open logstash-nginx_access-2016.09. .3kb .8kb
# 查看 ElasticSearch 索引情况
shell > curl -X GET 192.168.1.26:/_cat/shards?v
index shard prirep state docs store ip node
logstash-nginx_access-2016.09. r STARTED .8kb 192.168.1.26 node-
logstash-nginx_access-2016.09. p STARTED .8kb 192.168.1.27 node-
logstash-nginx_access-2016.09. p STARTED .3kb 192.168.1.26 node-
logstash-nginx_access-2016.09. r STARTED .3kb 192.168.1.27 node-
logstash-nginx_access-2016.09. r STARTED .9kb 192.168.1.26 node-
logstash-nginx_access-2016.09. p STARTED .9kb 192.168.1.27 node-
logstash-nginx_access-2016.09. p STARTED .5kb 192.168.1.26 node-
logstash-nginx_access-2016.09. r STARTED .5kb 192.168.1.27 node-
logstash-nginx_access-2016.09. p STARTED .6kb 192.168.1.26 node-
logstash-nginx_access-2016.09. r STARTED .6kb 192.168.1.27 node-
# 至此,ELK:LogStash 读取 Redis 信息写入 ElasticSearch 完成。
四、ELK:Kibana 去读取 ElasticSearch 数据并展示
shell > cd /usr/local/src
shell > wget https://download.elastic.co/kibana/kibana/kibana-4.6.1-linux-x86_64.tar.gz
shell > tar zxf kibana-4.6.-linux-x86_64.tar.gz
shell > mv kibana-4.6.-linux-x86_64 ../; cd shell > vim /usr/local/kibana-4.6.-linux-x86_64/config/kibana.yml elasticsearch.url: "http://192.168.1.26:9200" shell > /usr/local/kibana-4.6.-linux-x86_64/bin/kibana > /data/logs/kibana.log &
# 防火墙开放 TCP 5601 端口。访问 http://192.168.1.25:5601
# 剩下的工作就是根据业务,来抓取、拆分日志,并制作图标等。
五、留一份配置文件
1、客户端 LogStash
# Logstash input {
file {
type => "nginx_access"
path => ["/tmp/access.log"]
start_position => "beginning"
}
} output { # stdout {
# codec => rubydebug
# } redis {
host => "192.168.1.25"
port =>
data_type => "list"
key => "logstash-list"
}
}
2、服务端 LogStash
# Logstash.conf input {
redis {
host => "127.0.0.1"
port =>
data_type => "list"
key => "logstash-list"
}
} output { # stdout {
# codec => rubydebug
# } elasticsearch {
hosts => ["192.168.1.26:9200"]
index => "logstash-%{type}-%{+YYYY.MM.dd}"
document_type => "%{type}"
workers =>
flush_size =>
idle_flush_time =>
template_overwrite => true
}
}
3、ElasticSearch
shell > grep -vP '^#|^$' /usr/local/elasticsearch-2.4./config/elasticsearch.yml cluster.name: my-elk
node.name: node-
path.data: /data/esearch/data
path.logs: /data/esearch/logs
network.host: 192.168.1.26
http.port:
discovery.zen.ping.unicast.hosts: ["192.168.1.26","192.168.1.27"]
# End
ELK-Stack 最后一次全篇文档的更多相关文章
- ELK Stack 5.2.2 安装文档
简介: ELK Stack 安装文档,这次都使用最新版本(5.2.2).RPM 包的方式搭建 ELK Stack. 下载地址: https://artifacts.elastic.co/downloa ...
- 为什么开发者热衷在Stack Overflow上查阅API文档?
摘要:一项新研究跟踪了Android开发者的访问历史,发现开发者多达二分之一的文档是从Stack Overflow上获取到的,而Stack Overflow上的示例也多于官方指南,开发者通过搜索更多时 ...
- ELK Stack企业日志平台文档
ELK Stack企业日志平台文档 实验环境 主机名 IP地址 配置 系统版本 用途 controlno ...
- Elastic Stack 笔记(四)Elasticsearch5.6 索引及文档管理
博客地址:http://www.moonxy.com 一.前言 在 Elasticsearch 中,对文档进行索引等操作时,既可以通过 RESTful 接口进行操作,也可以通过 Java 也可以通过 ...
- elk实战分析nginx日志文档
elk实战分析nginx日志文档 架构: kibana <--- es-cluster <--- logstash <--- filebeat 环境准备:192.168.3.1 no ...
- ELK( ElasticSearch+ Logstash+ Kibana)分布式日志系统部署文档
开始在公司实施的小应用,慢慢完善之~~~~~~~~文档制作 了好作运维同事之间的前期普及.. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 软件下载地址: https://www.e ...
- 基于Apriori算法的Nginx+Lua+ELK异常流量拦截方案 郑昀 基于杨海波的设计文档(转)
郑昀 基于杨海波的设计文档 创建于2015/8/13 最后更新于2015/8/25 关键词:异常流量.rate limiting.Nginx.Apriori.频繁项集.先验算法.Lua.ELK 本文档 ...
- ELK安装文档
ELK安装文档: http://cuidehua.blog.51cto.com/5449828/1769525 如何将客户端日志通过ogstash-forwarder发送给服务端的logstash h ...
- 解决Mongoose 返回的文档过大导致模板引擎art-template无法渲染的问题,错误-RangeError: Maximum call stack size exceeded
参考:https://blog.csdn.net/qq_40659195/article/details/88411838 最近尝试用Node写一个小案例,使用到了MongoDB,使用过的人可以知道, ...
随机推荐
- 一些Fibonacci数列的神奇性质【数学】
递推式: \(f_i=1 (1\leq i\leq 2)\) \(f_i=f_{i-1}+f_{i-2}(i>2)\) 一些性质 \(\sum_{i=1}^n f_i=f_{n+2}-1\) \ ...
- 深入了解 WPF Dispatcher 的工作原理(Invoke/InvokeAsync 部分)
深耕 WPF 开发的各位程序员大大们一定避不开使用 Dispatcher.跨线程访问 UI 当然免不了用到它,将某个任务延迟到当前任务之后执行也会用到它.Dispatcher.Invoke.Dispa ...
- MQ 发布/订阅者模式
package com.chauvet.utils.mq.topic; import javax.jms.DeliveryMode; import javax.jms.JMSException; im ...
- iPhone4s 9.2.1安装cydia(越狱)
依据网上资料而来 主要就是上图视频中的6步骤选项,不要选错. 1.prepare for jailbreak 2.选择Accept 3. proceed with jailbreak 4.begin ...
- Django之Models
1.数据库的配置 1 django默认支持sqlite,mysql, oracle,postgresql数据库. <1> sqlite django默认使用sqlite的数据库,默 ...
- 转载——关于bp神经网络
一.BP神经网络的概念 BP神经网络是一种多层的前馈神经网络,其主要的特点是:信号是前向传播的,而误差是反向传播的.具体来说,对于如下的只含一个隐层的神经网络模型: (三层BP神经网络模型) ...
- 安装WampServer关闭mysql服务后打不开了
WampServer自带了mysql精简班的数据库了 WampServer自带 的mysql和你独立安装的mysql端口号冲突了 mysql默认的端口号是3306 建议你修改WampServer的数据 ...
- lua中的数学库
Lua5.1中数学库的所有函数如下表: 使用数学库,不需要require,直接math.function就可以math.pi 为圆周率常量 = 3.14159265358979323846 abs 取 ...
- 系列文章--一步一步学Silverlight2
概述 由TerryLee编写的<Silverlight 2完美征程>一书,已经上市,在该系列文章的基础上补充了大量的内容,敬请关注.官方网站:http://www.dotneteye.cn ...
- js验证手机号码,邮箱,qq号
function validateMail(str:String) { var re_m = /^[a-z\d]+(\.[a-z\d]+)*@([\da-z](-[\da-z])?)+(\.{1,2} ...