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,使用过的人可以知道, ...
随机推荐
- Java 层级的简单理解
在J2EE项目中,开发的都是分层来做的: 1.service层:用于暴露给网络调用 2.Impl层:统一规范接口 3.bean层:实体对象,也就是表 4.DAO(Data Access Object) ...
- python 正则表达式字符说明
. 元字符 说明 . 代表任意字符 | 逻辑或操作符 [ ] 匹配内部的任一字符或子表达式 [^] 对字符集和取非 - 定义一个区间 \ 对下一字符取非(通常是普通变特殊,特殊变普通) * 匹配前面的 ...
- apache phoenix 安装试用
备注: 本次安装是在hbase docker 镜像的基础上配置的,主要是为了方便学习,而hbase搭建有觉得 有点费事,用镜像简单. 1. hbase 镜像 docker pull har ...
- Docker-Compose API too old for Windows
I was working on some code with a Docker Windows container today and ran into this error message: ER ...
- Hbase 之 HBase 的整体架构
HBase 系统架构图 组成部件说明 Client: 使用HBase RPC机制与HMaster和HRegionServer进行通信 Client与HMaster进行通信进行管理类操作 Cli ...
- requirejs 到底有什么好处?
无论是在backbone时代,还是angularjs 时代 我都用过requirejs, 后来慢慢全都去掉了, 因为在前端开发requirejs 感觉没有带来任何实质性的好处. 从几个方面说说我的感受 ...
- hibernate规避SQL注入实例
项目被检测出SQL注入,注入url如:http://127.0.0.1:8080/Test/wlf/getServiceInfo.html?province=%25E6%25B5%2599%25E6% ...
- kbuild-(directory)
-INDEX - this file: info on the kernel build process kbuild.txt - developer information on kbuild kc ...
- DRF 解析器组件
Django无法处理application/json协议请求的数据,即,如果用户通过application/json协议发送请求数据到达Django服务器,我们通过request.POST获取到的是一 ...
- AndroidUI 控件命名格式
TextView ->txt EditText->edit Button ->btn