ELK 集群 + Redis 集群 + Nginx ,分布式的实时日志(数据)搜集和分析的监控系统搭建,简单上手使用
简述
ELK实际上是三个工具的集合,ElasticSearch + Logstash + Kibana,这三个工具组合形成了一套实用、易用的监控架构,很多公司利用它来搭建可视化的海量日志分析平台。
官网下载地址:https://www.elastic.co/downloads
Elasticsearch
是一个基于Apache Lucene(TM)的开源搜索引擎 ,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,RESTful web风格接口,多数据源,自动搜索负载等。
Logstash
是一个用来搜集、分析、过滤日志的工具。它支持几乎任何类型的日志,包括系统日志、错误日志和自定义应用程序日志。它可以从许多来源接收日志,这些来源包括 syslog、消息传递(例如 RabbitMQ)和JMX,它能够以多种方式输出数据,包括电子邮件、websockets和 Elasticsearch。
Kibana
是一个基于Web的图形界面,用于搜索、分析和可视化存储在 Elasticsearch指标中的日志数据。它利用Elasticsearch的REST接口来检索数据,不仅允许用户创建他们自己的数据的定制仪表板视图,还允许他们以特殊的方式查询和过滤数据。
Redis
Redis优势性能极高 – Redis
能读的速度是110000次/s
,写的速度是81000
次/s 。
丰富的数据类型 – Redis
支持二进制案例的 Strings, Lists, Hashes, Sets
及 Ordered Sets
数据类型操作。
原子 – Redis
的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。
丰富的特性 – Redis
还支持 publish/subscribe
, 通知, key
过期等等特性。
Nginx
是一个高性能的 Web 和反向代理服务器, 它具有有很多非常优越的特性:
作为 Web 服务器
:相比 Apache,Nginx 使用更少的资源,支持更多的并发连接,体现更高的效率,这点使 Nginx 尤其受到虚拟主机提供商的欢迎。能够支持高达 50,000 个并发连接数的响应,感谢 Nginx 为我们选择了 epoll and kqueue 作为开发模型.作为负载均衡服务器
:Nginx 既可以在内部直接支持 Rails 和 PHP,也可以支持作为 HTTP代理服务器 对外进行服务。Nginx 用 C 编写, 不论是系统资源开销还是 CPU 使用效率都比 Perlbal 要好的多。
应用场景
在传统的应用运行环境中,收集、分析日志往往是非常必要且常见的,一旦应用出现问题、或者需要分析应用行为时,管理员将通过一些传统工具对日志进行检查,如cat、tail、sed、awk、perl以及grep。这种做法有助于培养在常用工具方面的优秀技能,但它的适用范围仅限于少量的主机和日志文件类型。
随着应用系统的复杂性与日俱增,日志的分析也越来越重要,常见的需求包括,团队开发过程中可能遇到一些和日志有关的问题:
- 开发没有生产环境服务器权限,需要通过系统管理员获取详细日志,沟通成本高
- 系统可能是有多个不同语言编写、分布式环境下的模块组成,查找日志费时费力
- 日志数量巨大,查询时间很长
1.准备工作
环境
ElasticSearch : elasticsearch-5.5.2
Logstash : logstash-5.5.2
kibana:kibana-5.5.2
JDK: 1.8
Redis: Redis-4.0.1
Nginx: 1.9.9
node1 --> ElasticSearch: 192.168.252.121:9200
node2 --> ElasticSearch: 192.168.252.122:9200
node3 --> ElasticSearch: 192.168.252.123:9200 node4 --> Logstash: 192.168.252.124
node4 --> nginx: 192.168.252.124node5 --> Kibana: 192.168.252.125node6 --> Redis: 192.168.252.126
node7 --> Redis: 192.168.252.127
node8 --> Redis: 192.168.252.128
修改主机名
CentOs7.3 修改主机名
安装依赖
本次搭建,ELK 集群 + Redis + Nginx 日志分析平台,需要安装以下软件
安装 JDK
CentOs7.3 安装 JDK1.8
安装 Nginx
CentOs7.3 编译安装 Nginx 1.9.9
安装 Redis集群
CentOs7.3 搭建 Redis-4.0.1 Cluster 集群服务
关闭防火墙
节点之前需要开放指定端口,为了方便,生产不要禁用
systemctl stop firewalld.service
2.Elasticsearch
ES单机安装
Installing Elasticsearch
下载解压
Elasticsearch 下载地址:https://www.elastic.co/downloads/elasticsearch
cd /opt
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.5.2.tar.gz
tar -xzf elasticsearch-5.5.2.tar.gz
编辑配置
只要集群名相同ps(cluster.name:
),且机器处于同一局域网同一网段,Elasticsearch
会自动去发现其他的节点
vi /opt/elasticsearch-5.5.2/config/elasticsearch.yml
cluster.name: ymq
node.name: ELK-node1
network.host: 0.0.0.0
http.port: 9200
通过jvm.options 编辑设置JVM堆大小
vi /opt/elasticsearch-5.5.2/config/jvm.options-Xms2g --》修改为512m
-Xmx2g --》修改为512m
启动服务
/opt/elasticsearch-5.5.2/bin/elasticsearch -d
ElasticSearch 安装报错整理
查看日志
日志名称ymq
就是 cluster.name: ymq
的名称
less /opt/elasticsearch-5.5.2/logs/ymq.log
查看端口
netstat -nltp
tcp6 0 0 :::9200 :::* LISTEN 2944/java
tcp6 0 0 :::9300 :::* LISTEN 2944/java
测试访问
curl -X GET http://localhost:9200/
{"name" : "ELK-node1","cluster_name" : "ymq","cluster_uuid" : "jxWzvSFNTCWtToD6wrVIpA","version" : {"number" : "5.5.2","build_hash" : "b2f0c09","build_date" : "2017-08-14T12:33:14.154Z","build_snapshot" : false,"lucene_version" : "6.6.0"},"tagline" : "You Know, for Search"
健康状态
curl -X GET http://192.168.252.123:9200/_cat/health?v
epoch timestamp cluster status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
1504102874 22:21:14 ymq green 1 1 0 0 0 0 0 0 - 100.0%
关闭服务
直接杀掉进程
jps2968 Elasticsearch
3135 Jps
kill -9 2968
ES集群安装
依次安装nide2,node3,集群
《不推荐》如果你一台机器,已经安装好,可以参考我这个复制集群配置操作
编辑配置
集群配置
集群名必须相同ps(cluster.name:
),且机器处于同一局域网同一网段,Elasticsearch
会自动去发现其他的节点
vi /opt/elasticsearch-5.5.2/config/elasticsearch.yml
node.name
换个名字,可以ELK-node2
,ELK-node3
node.name: ELK-node2
node.name: ELK-node3
配置集群时,必须设置集群中与其他的节点通信的列表,如果没有指定端口
,该端口将默认为9300
discovery.zen.ping.unicast.hosts: ["192.168.252.121","192.168.252.122","192.168.252.123"]
为了防止数据丢失
discovery.zen.minimum_master_nodes: 2
discovery.zen.minimum_master_nodes
(默认是1):这个参数控制的是,一个节点需要看到的具有master节点资格的最小数量,然后才能在集群中做操作。官方的推荐值是(N/2)+1,其中N是具有master资格的节点的数量(我们的情况是3,因此这个参数设置为2,但对于只有2个节点的情况,设置为2就有些问题了,一个节点DOWN掉后,你肯定连不上2台服务器了,这点需要注意)。
启动服务
依次启动各个集群
/opt/elasticsearch-5.5.2/bin/elasticsearch -d
ElasticSearch 安装报错整理
集群操作
集群操作 API
节点列表
curl 'localhost:9200/_cat/nodes?v'
ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
192.168.252.121 11 92 0 0.00 0.04 0.05 mdi * ELK-node1
192.168.252.122 16 94 0 0.00 0.04 0.09 mdi - ELK-node2
192.168.252.123 13 92 0 0.02 0.05 0.07 mdi - ELK-node3
集群健康
集群健康
curl -XGET 'http://localhost:9200/_cluster/health?pretty'
{"cluster_name" : "ymq","status" : "green","timed_out" : false,"number_of_nodes" : 3,"number_of_data_nodes" : 3,"active_primary_shards" : 0,"active_shards" : 0,"relocating_shards" : 0,"initializing_shards" : 0,"unassigned_shards" : 0,"delayed_unassigned_shards" : 0,"number_of_pending_tasks" : 0,"number_of_in_flight_fetch" : 0,"task_max_waiting_in_queue_millis" : 0,"active_shards_percent_as_number" : 100.0
}
群集状态
获得整个集群的综合状态信息。
curl -XGET 'http://localhost:9200/_cluster/state?pretty'
{"cluster_name" : "ymq","version" : 3,"state_uuid" : "uWsrNkiFTOSItF5LFZTl1A","master_node" : "118aXxRfQIaYQ9Y-mDIfSg","blocks" : { },"nodes" : {"118aXxRfQIaYQ9Y-mDIfSg" : {"name" : "ELK-node1","ephemeral_id" : "9pT8VWO5SjyRCYMe6qUdgA","transport_address" : "192.168.252.121:9300","attributes" : { }},"R2aiceefQ9aoSqY0_SXZew" : {"name" : "ELK-node2","ephemeral_id" : "1tAgHHrORP65KmHwAkKYaw","transport_address" : "192.168.252.122:9300","attributes" : { }},"P9XQhjaYQrSWpke8rzrgeg" : {"name" : "ELK-node3","ephemeral_id" : "LSjPP11PSx-7YaUw3a-CSw","transport_address" : "192.168.252.123:9300","attributes" : { }}},"metadata" : {"cluster_uuid" : "-aqZbTMNTHGzPIm_KoLiiw","templates" : { },"indices" : { },"index-graveyard" : {"tombstones" : [ ]}},"routing_table" : {"indices" : { }},"routing_nodes" : {"unassigned" : [ ],"nodes" : {"P9XQhjaYQrSWpke8rzrgeg" : [ ],"118aXxRfQIaYQ9Y-mDIfSg" : [ ],"R2aiceefQ9aoSqY0_SXZew" : [ ]}}
}
ES 插架
概要
Chrome扩展程序包含优秀的ElasticSearch Head
应用程序。
动机
这是因为ElasticSearch 5 删除了将ElasticSearch Head作为弹性插件运行的功能而创建的。这为您自己的Web服务器提供了自主托管的替代方案。它还具有绕过CORS而不在您的Elastic服务器上配置CORS的优点。
使用
单击Web浏览器工具栏中的扩展名图标。
键入弹性节点的地址到打开的新选项卡的顶部。
单击连接按钮。
安装
需要翻墙安装
在Chrome扩展程序里,搜索ElasticSearch Head 点击安装
3.Logstash
Installing Logstash
下载解压
cd /opt
wget https://artifacts.elastic.co/downloads/logstash/logstash-5.5.2.tar.gz
tar -xzf logstash-5.5.2.tar.gz
测试一下
测试 logstash 是否正常运行
/opt/logstash-5.5.2/bin/logstash -e 'input{stdin{}}output{stdout{codec=>rubydebug}}'
敲入 Hello World,回车
结果
Hello World
{"@timestamp" => 2017-08-30T17:24:25.553Z,"@version" => "1","host" => "node4","message" => "Hello World"
}
编辑配置
Logstash配置示例
开启 logstash agent
编辑 Nginx 配置,解开默认的 Nginx #
注释
vi /usr/local/nginx/conf/nginx.conf
在nginx.conf 中设置日志格式:logstash
log_format main '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';
负责收集nginx访问日志信息传送到redis队列上
cd /opt/logstash-5.5.2
mkdir etc
vi /opt/logstash-5.5.2/etc/logstash_agent_nginx.conf
input {file {type => "nginx_access_log"path => "/usr/local/nginx/logs/access.log"}
}
output {redis {host => "192.168.252.126"data_type => "list"port => "6379"key => "logstash:redis"}
}
多日志文件例如
path => [ "/usr/local/nginx/logs/*.log", "/var/log/messages.log", "/var/log/syslog.log" ]
input {}
解释
读取nginx访问日志access.log
,Logstash 使用一个名叫 FileWatch 的 Ruby Gem 库来监听文件变化 FileWatch 插件只支持文件的绝对路径,而且会不自动递归目录。所以有需要的话,请用数组方式都写明具体哪些文件。
output {}
解释
发送,Logstash 收集的 Nginx 访问日志信息传送到 redis 服务器上
开启 logstash indexer
cd /opt/logstash-5.5.2
mkdir etc
vi /opt/logstash-5.5.2/etc/logstash_indexer.conf
input {redis {host => "192.168.252.126"data_type => "list"port => "6379"key => "logstash:redis"type => "redis-input"}
}output {elasticsearch {hosts => ["192.168.252.121:9200"]index => "logstash-%{type}-%{+YYYY.MM.dd}"document_type => "%{type}"flush_size => 20000idle_flush_time => 10sniffing => truetemplate_overwrite => true}
}
input {}
解释
读取Redis
key logstash:redis
的数据
output {}
解释
批量发送Elasticsearch,本插件的 flush_size 和 idle_flush_time 两个参数共同控制 Logstash 向 Elasticsearch 发送批量数据的行为。以上面示例来说:Logstash 会努力攒到 20000 条数据一次性发送出去,但是如果 10 秒钟内也没攒够 20000 条,Logstash 还是会以当前攒到的数据量发一次。 默认情况下,flush_size 是 500 条,idle_flush_time 是 1 秒。这也是很多人改大了 flush_size 也没能提高写入 ES 性能的原因——Logstash 还是 1 秒钟发送一次。
启动服务
cd /opt/logstash-5.5.2/logs/
mkdir log1 log2
启动 logstash agent
logstash
代理收集日志发送 Redis
nohup /opt/logstash-5.5.2/bin/logstash -f /opt/logstash-5.5.2/etc/logstash_agent_nginx.conf --path.data=/opt/logstash-5.5.2/logs/log1 > /dev/null 2>&1 &
启动 logstash indexer
logstash
读 Redis
日志发送到Elasticsearch
nohup /opt/logstash-5.5.2/bin/logstash -f /opt/logstash-5.5.2/etc/logstash_indexer.conf --path.data=/opt/logstash-5.5.2/logs/log2 > /dev/null 2>&1 &
查看日志
less /opt/logstash-5.5.2/logs/logstash-plain.log
4.Kibana
Installing Kibana
下载解压
cd /opt
wget https://artifacts.elastic.co/downloads/kibana/kibana-5.5.2-linux-x86_64.tar.gz
tar -xzf kibana-5.5.2-linux-x86_64.tar.gz
编辑配置
cd /opt/kibana-5.5.2-linux-x86_64
vi config/kibana.yml
server.port: 5601
server.host: "0.0.0.0"
elasticsearch.url: "http://192.168.252.121:9200"
启动服务
cd /opt/kibana-5.5.2-linux-x86_64/bin/./kibana
访问 Kibana
访问 Kibana
地址 http://192.168.252.125:5601/
5.测试日志分析平台
如果之前启动过就kill
掉
启动以下服务
启动 ES
集群
切换到,新建用户 ymq
,依次启动各个 elasticsearch 集群
su ymq
/opt/elasticsearch-5.5.2/bin/elasticsearch -d
启动 kibana
/opt/kibana-5.5.2-linux-x86_64/bin/kibana
启动 Redis
/opt/redis-4.0.1/src/redis-server /opt/redis-4.0.1/redis-sentinel/redis.conf
启动 Nginx
/usr/local/nginx/sbin/nginx
测试步骤
1.检查各服务
检查各服务,是否启动成功 ,是否日志异常
2.启动logstash agent
启动 logstash agent
logstash
代理收集日志发送 Redis
nohup /opt/logstash-5.5.2/bin/logstash -f /opt/logstash-5.5.2/etc/logstash_agent_nginx.conf --path.data=/opt/logstash-5.5.2/logs/log1 > /dev/null 2>&1 &
3.生成测试数据
在浏览器 Nginx
页面 刷新 2 次,生成测试数据
4.查看测试数据
打开RedisDesktopManager
页面看看Nginx 刷新页面的访问成功日志,看到 写进 Redis 2 条数据
ps 这只是个可视化Redis界面而已,你也可以使用命令行查看
如果没有 RedisDesktopManager
,就在安装Redis 服务器上 通过命令行查看
[root@node6 opt]# /opt/redis-4.0.1/src/redis-cli -h 192.168.252.126 -c -p 6379
192.168.252.126:6379> LRANGE logstash:redis 0 9
Redis 相关
5.使用kibana
在浏览器打开kibana Dev Tools
http://192.168.252.125:5601
可以看到ElasticSearch
是没有 Nginx
刷新页面的访问成功日志数据的,是因为,我没有启动 logstash indexer
读取Redis
数据写入ElasticSearch
的服务
6.启动logstash indexer
启动 logstash indexer
logstash
读 Redis
日志发送到Elasticsearch
nohup /opt/logstash-5.5.2/bin/logstash -f /opt/logstash-5.5.2/etc/logstash_indexer.conf --path.data=/opt/logstash-5.5.2/logs/log2 > /dev/null 2>&1 &
先看Redis
,已经是空的了
192.168.252.126:6379> LRANGE logstash:redis 0 9
(empty list or set)
是不是已经写到 ElasticSearch
呢? 往下看
7.使用kibana DevTools
我们看看,DevTools
,开发工具数据查询,相比上次已经看到多了 2 条,就是我们访问 Nginx` 刷新页面的访问成功日志数据
8.使用ElasticSearchHead
通过 ElasticSearchHead 插件 查看数据
9.使用kibana Discover
首先使用kibana Discover
配置索引 logstash-*
ps ( 索引名称是按照 elasticsearch
写入时创建的索引 index => "logstash-%{type}-%{+YYYY.MM.dd}"
这个配置在上面开启 logstash indexer 有提到
10.使用kibana Search
点击Available Fields
下选择咱们日志中的字段 key
add
可添加更多显示字段,我为了博客显示效果,没有让显示全部,默认显示全部字段,也可由删除显示字段
11.使用kibana Search 条件查询
点击Discover 工具栏
下选择 指定时间 2017-09-01 23:45:00.000 ----2017-09-01 23:50:00.000
的日志,
搜索关键词AppleWebKit
图形表示 Hourly 每小时
12.使用kibana Timelion
最后6分钟的时间轴
ELK 集群 + Redis 集群 + Nginx ,分布式的实时日志(数据)搜集和分析的监控系统搭建,简单上手使用相关推荐
- ELK日志监控系统搭建
ELK日志监控系统搭建 一.安装Elasticsearch: https://es.xiaoleilu.com/index.html 1.下载elasticsearch安装文件,官网下载地址:htt ...
- Ganglia集群监控系统搭建
前段时间自己用两台工作站搭建了一个MPI的运行环境,那如何直观的看到每个节点的负载情况呢,于是就想到了用Ganglia搭建一个集群检测系统,相对比较简单,下面详细介绍一下过程 1.Ganglia概述 ...
- redis set 超时_redis分布式锁3种实现方式对比分析总结
我在这篇文章提到了分布式锁,但没有展开来讲,抛砖引玉,今天就来说说高并发服务编程中的redis分布式锁. 这里罗列出3种redis实现的分布式锁,并分别对比说明各自特点. Redis单实例分布式锁 实 ...
- 架构设计:Vue+nginx+jwt+zuul+eureka+ribbon+hystrix+rabbitmq+mysql集群+redis集群+elsticsearch集群
- 【Elastic Stack学习】ELK日志分析平台(一)ELK简介、ElasticSearch集群
* ELK简介: ELK是Elasticsearch . Logstash.Kibana三个开源软件的缩写.ELK Stack 5.0版本之后新增Beats工具,因此,ELK Stack也改名为Ela ...
- Redis(持久化、主从复制、主从切换、twemproxy、redis集群)
文章目录 Redis Redis应用场景 下载及安装 Redis常用指令 Redis持久化 Redis主从复制 Redis的Sentinel分布式系统(主从切换) sentnel(Redis的高可用方 ...
- redis集群介绍和搭建 (3个主机,6个实例)
·redis集群 Redis集群是一个提供在多个redis节点间共享数据的程序集. Redis Cluster模式是Redis3.0之后推荐的一种解决方案,其是由多个主节点群组成的分布式服务器群,它具 ...
- Redis集群架构搭建和原理
Redis集群架构教程 Redis常见的架构有主从.哨兵.高可用集群,接下来的文章分四章分别介绍linux安装redis.主从架构搭建.哨兵模式搭建.集群架构搭建 第一章 Redis的安装 我的cen ...
- 支撑腾讯直播百亿请求的 Redis 集群是如何工作的
摘要:作为noSql中的kv数据库的王者,redis以其高性能,低时延,丰富的数据结构备受开发者青睐,但是由于redis在水平伸缩性上受限,如何做到能够水平扩容,同时对业务无侵入性是很多使用redis ...
最新文章
- 【iOS】日历行程的增删改查(完整)
- Pure-FTPd服务器
- 双链表的创建,求长,插入,删除,打印,释放(循环和非循环)
- 使用tomcat的jndi方式连接mysql的字符编码设置
- c++ 门面模式(Facade)
- 网路知识:为什么宽带越用越慢,看完你就明白了
- C语言及程序设计进阶例程-17 认识链表
- 如何创建和使用自引用层次结构表
- pp助手苹果版_PP助手下线iOS版,曾首发iOS 9完美越狱工具,再见~
- UNIX编程艺术笔记
- EA enterprise architect 画用例图
- udp端口转发 Linux,Linux下利用iptables快速实现UDP/TCP端口转发
- 缉拿IP冲突之后的“真凶”
- Vista 自动激活工具(最新 最权威 所有版本 可升级)
- 低通滤波器的一阶RC电路模型
- 微信 oauth2.0 php,微信公众平台OAuth2.0 认证
- 干货 | 一起聊聊技术与写作
- 估算活动持续时间-规划管理
- [渝粤教育] 重庆工商职业学院 生活中的大数据 参考 资料
- Maven-assemble打包使用案例