热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

离线部署ELK+Kafka日志管理系统

nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd

1、简介

对于日志来说,最常见的需求就是收集、查询、显示,正对应logstash、elasticsearch、kibana的功能。ELK日志系统在系统中,主要可解决的问题:

  • 基于日志的数据挖掘
  • 问题排查,上线检查
  • 根据关键字查询日志详情
  • 异常数据自动触发消息通知
  • 服务器监控,应用监控,Bug管理
  • 统计分析,比如接口的调用次数、执行时间、成功率等
  • 性能分析,用户行为分析,安全漏洞分析,时间管理

Logstash:

Logstash是一个用来搜集、分析、过滤日志的工具。它支持几乎任何类型的日志,包括系统日志、错误日志和自定义应用程序日志。它可以从许多来源接收日志,这些来源包括 syslog、消息传递(例如 RabbitMQ)和JMX,它能够以多种方式输出数据,包括电子邮件、websockets和Elasticsearch。与其他监控系统的整合也很方便,可以将数据输出到zabbix、nagios等。还可以把数据统计后输出到graphite,实现统计数据的可视化显示。

logstash对日志的处理逻辑很简单,就是一个pipeline的过程:

inputs >> codecs >> filters>> outputs

agent分布在每一台需要采集数据的节点上,agent只是Logstash承担的一个角色,与此对应的是indexer。agent会分别将各自获取的日志作为输入输出到一个消息代理(例如Redis或者kafka),indexer会将消息代理作为输入再输出到ES上,由ES做indexing。其实Logstash在整个过程中只负责输入输出,对Logstash而言并没有agent和index之分。如果日志量小的话完全不需要设置indexer,直接将ES作为agent的输出源。

Elasticsearch:

elasticsearch是基于lucene的开源搜索引擎,主要的特点有

  • real time
  • distributed
  • high availability
  • document oriented
  • schema free
  • restful api

kibana:

Kibana是一个基于Web的图形界面,用于搜索、分析和可视化存储在 Elasticsearch指标中的日志数据。它利用Elasticsearch的REST接口来检索数据,不仅允许用户创建他们自己的数据的定制仪表板视图,还允许他们以特殊的方式查询和过滤数据。kibana是根据前台过滤的条件,生成query 发送到elasticsearch,然后根据返回的值重绘页面。

下面用一张图来展示整个架构:

#

以上是我查看网上资料最终总结的,感谢各位大神的贡献。

2、测试环境说明

下面通过在测试环境下搭建ELK日志系统来对ELK进行更加深入的认识。

软件环境:

logstash-2.3.3.tar.gz  marvel-2.3.3.tar.gzelasticsearch-2.3.3.zip  kibana-4.5.1-linux-x64    marvel-agent-2.3.3.zip  elasticsearch-head-master.zip  license-2.3.3.zip  jdk-8u101-linux-x64.tar.gz  kafka_2.10-0.10.0.1.tgz  zookeeper-3.4.6.tar.gz

服务器和角色:

192.168.1.101          kafka+zookeeper   

192.168.1.102          kafka+zookeeper     

192.168.1.103          kafka+zookeeper  logstash shipper

192.168.1.104          logstash shipper

192.168.1.105            elasticsearch kibana

192.168.1.106        logstash indexer

说明:

本篇分别对上边的物理节点标识为node1—node6,下面都以这种称谓。

Node1和nide2以及node3三台节点上搭建kafka+zookeeper集群,另外node3本身也是一个nginx服务器。

Node4上搭建nginx服务器,和node3一起负责logstash日志数据生产端,把nginx日志传给kafka集群。

日志传输方向:

Nginx日志-->logstash shipper-->kafka+zookeeper-->logstash indexer-->elasticsearch

最后kibana负责展示es收集到的数据

3、 配置Java环境
 

各节点配置jdk1.8的环境

/home/apps # tar -zxvf jdk-8u101-linux-x64.tar.gz

/home/apps # ln -sv /home/apps/jdk1.8.0_101/usr/local/jdk1.8.0_101

`/usr/local/jdk1.8.0_101' ->`/home/apps/jdk1.8.0_101'

编辑环境变量文件,注释掉之前的java环境配置,添加下面的内容

/home/apps # vi /etc/profile

JAVA_HOME=/usr/local/jdk1.8.0_101

PATH=$JAVA_HOME/bin:$PATH

CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar

export PATH JAVA_HOME CLASSPATH

/home/apps #source /etc/profile

/home/apps # java -version

java version "1.8.0_101"

Java(TM) SE Runtime Environment (build1.8.0_101-b13)

Java HotSpot(TM) 64-Bit Server VM (build25.101-b13, mixed mode)

4、搭建kafka+zookeeper集群环境

4.1、node1上安装配置zookeeper

 

解压包

# tar -xf kafka_2.10-0.10.0.1.tgz -C /usr/local

# tar -zxf zookeeper-3.4.6.tar.gz -C /usr/local

# cd /usr/local

# mv kafka_2.10-0.10.0.1/ kafka

# mv zookeeper-3.4.6/ zookeeper

生成zookeeper配置文件

# cd zookeeper/conf

# cp zoo_sample.cfg zoo.cfg

编辑配置文件

# vi zoo.cfg

dataDir=/usr/local/zookeeper/tmp/zookeeper

server.1=192.168.1.101:2888:3888

server.2=192.168.1.102:2888:3888

server.3=192.168.1.103:2888:3888

# cd ..

# mkdir -p tmp/zookeeper

# echo "1" >tmp/zookeeper/myid

4.2、配置node2和node3的zookeeper

 

依照node1的配置配置node2和node3,注意下面的参数三个节点各有差异

Node2:

# echo "2" >tmp/zookeeper/myid

Node3:

# echo "3" >tmp/zookeeper/myid

其他配置都一样

4.3、依次启动三个节点的服务

 

# ./bin/zkServer.sh start conf/zoo.cfg

Using config:/usr/local/zookeeper/bin/../conf/zoo.cfg

Starting zookeeper ... STARTED

查看三个节点的状态

Node1:

# ./bin/zkServer.sh status

JMX enabled by default

Using config:/usr/local/zookeeper/bin/../conf/zoo.cfg

Mode: follower

Node2:

# ./bin/zkServer.sh status

JMX enabled by default

Using config:/usr/local/zookeeper/bin/../conf/zoo.cfg

Mode: follower

Node3:

# ./bin/zkServer.sh status

JMX enabled by default

Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg

Mode: leader

4.4、配置node1的kafka

# cd ../kafka

# vi config/server.properties

broker.id=0

port=9092

host.name=node1

log.dirs=/usr/local/kafka/tmp/kafka-logs

num.partitiOns=2

zookeeper.cOnnect=192.168.1.101:2181,192.168.1.102:2181,192.168.1.103:2181

4.5、配置Node2和node3的kafka

依照node1的配置配置node2和node3,注意下面的参数三个节点各有差异

Node2:

broker.id=1

host.name=node2

node3:

broker.id=2

host.name=node3

说明:

host.name是节点的主机名

依次启动三个节点的kafka

# ./bin/kafka-server-start config/server.properties

4.6、创建topic验证集群是否正常

Node1上创建topic

/usr/local/kafka# bin/kafka-topics.sh --create --zookeeper 192.168.1.100:2181--replication-factor 3 --partitions 2 --topic test1

Created topic "test1".

Node2上发送消息至kafka(2节点模拟producer)

/usr/local/kafka # bin/kafka-console-producer.sh --broker-list 192.168.1.100:9092 --topic test1

hello world

Node3显示消息的消费(3节点模拟consumer)

/usr/local/kafka # bin/kafka-console-consumer.sh --zookeeper  192.168.1.100:2181 --topic test1 --from-beginning

hello world

可以看到在node2节点的输入的信息可以在nide3节点显示,说明集群正常使用。

使用下面的命令可以查看zookeeper服务的端口

# netstat -nlpt | grep -E "2181|2888|3888"

5、配置es和kibana

在node5节点配置es

5.1、创建elasticsearch账户

# groupadd eSUSEr

# useradd -d /home/esuser -m esuser

# passwd esuser

/home/apps # unzip elasticsearch-2.3.3.zip

/home/apps # mv elasticsearch-2.3.3 /usr/local/elasticsearch

5.2、编辑es配置文件

# cd /usr/local/elasticsearch/

编辑es配置文件

# vi config/elasticsearch.yml

cluster.name: es_cluster

node.name: node5

path.data: /usr/local/elasticsearch/data

path.logs: /usr/local/elasticsearch/logs

network.host: 192.168.1.105

http.port: 9200

# mkdir data logs

修改目录权限

/home/apps # chown -R esuser:esuser /usr/local/elasticsearch/

切换到esuser用户,启动es服务

/usr/local/elasticsearch> ./bin/elasticsearch

可使用下面命令查看es服务端口情况

# netstat -nlpt | grep -E "9200|9300"

浏览器输入http://192.168.1.105:9200/,显示如下所示信息,说明服务正常

{

  "name" : "node5",

  "cluster_name" : "es_cluster",

  "version" : {

    "number" : "2.3.3",

    "build_hash" : "218bdf10790eef486ff2c41a3df5cfa32dadcfde",

    "build_timestamp" : "2016-05-17T15:40:04Z",

    "build_snapshot" : false,

    "lucene_version" : "5.5.0"

  },

  "tagline" : "You Know, for Search"

}

5.3、ES插件配置

/home/apps # unzip elasticsearch-head-master.zip

# mv elasticsearch-head-master /usr/local/elasticsearch/plugins/head

在浏览器中输入http://192.168.1.105:9200/_plugin/head/,出现如图【ELK&kafka1】所示的画面。

#

ELK&kafka1

marvel插件的安装

/usr/local/elasticsearch # ./bin/plugininstall file:///home/apps/license-2.3.3.zip

-> Installing fromfile:/home/apps/license-2.3.3.zip...

Trying file:/home/apps/license-2.3.3.zip...

Downloading .DONE

Verifying file:/home/apps/license-2.3.3.zipchecksums if available ...

NOTE: Unable to verify checksum fordownloaded plugin (unable to find .sha1 or .md5 file to verify)

Installed license into/usr/local/elasticsearch/plugins/license

/usr/local/elasticsearch # ./bin/plugininstall file:///home/apps/marvel-agent-2.3.3.zip

-> Installing fromfile:/home/apps/marvel-agent-2.3.3.zip...

Tryingfile:/home/apps/marvel-agent-2.3.3.zip ...

Downloading ..DONE

Verifyingfile:/home/apps/marvel-agent-2.3.3.zip checksums if available ...

NOTE: Unable to verify checksum fordownloaded plugin (unable to find .sha1 or .md5 file to verify)

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

@    WARNING: plugin requires additional permissions    @

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

* java.lang.RuntimePermission setFactory

* javax.net.ssl.SSLPermission setHostnameVerifier

Seehttp://docs.Oracle.com/javase/8/docs/technotes/guides/security/permissions.html

for descriptions of what these permissionsallow and the associated risks.

Continue with installation? [y/N]y

Installed marvel-agent into/usr/local/elasticsearch/plugins/marvel-agent

更多详情见请继续阅读下一页的精彩内容: 2017-03/141430p2.htm


推荐阅读
  • 2016-2017学年《网络安全实战》第三次作业
    2016-2017学年《网络安全实战》第三次作业总结了教材中关于网络信息收集技术的内容。本章主要探讨了网络踩点、网络扫描和网络查点三个关键步骤。其中,网络踩点旨在通过公开渠道收集目标信息,为后续的安全测试奠定基础,而不涉及实际的入侵行为。 ... [详细]
  • 作为软件工程专业的学生,我深知课堂上教师讲解速度之快,很多时候需要课后自行消化和巩固。因此,撰写这篇Java Web开发入门教程,旨在帮助初学者更好地理解和掌握基础知识。通过详细记录学习过程,希望能为更多像我一样在基础方面还有待提升的学员提供有益的参考。 ... [详细]
  • FreeBSD环境下PHP GD库安装问题的详细解决方案
    在 FreeBSD 环境下,安装 PHP GD 库时可能会遇到一些常见的问题。本文详细介绍了从配置到编译的完整步骤,包括解决依赖关系、配置选项以及常见错误的处理方法。通过这些详细的指导,开发者可以顺利地在 FreeBSD 上完成 PHP GD 库的安装,确保其正常运行。此外,本文还提供了一些优化建议,帮助提高安装过程的效率和稳定性。 ... [详细]
  • 2020年9月15日,Oracle正式发布了最新的JDK 15版本。本次更新带来了许多新特性,包括隐藏类、EdDSA签名算法、模式匹配、记录类、封闭类和文本块等。 ... [详细]
  • 为什么多数程序员难以成为架构师?
    探讨80%的程序员为何难以晋升为架构师,涉及技术深度、经验积累和综合能力等方面。本文将详细解析Tomcat的配置和服务组件,帮助读者理解其内部机制。 ... [详细]
  • 本文总结了Java初学者需要掌握的六大核心知识点,帮助你更好地理解和应用Java编程。无论你是刚刚入门还是希望巩固基础,这些知识点都是必不可少的。 ... [详细]
  • 本文介绍了如何通过安装 rpm 包来使用 resize2fs 和 ext2online 工具进行系统文件的扩容。提供了详细的步骤和注意事项。 ... [详细]
  • 字符串学习时间:1.5W(“W”周,下同)知识点checkliststrlen()函数的返回值是什么类型的?字 ... [详细]
  • window下的python安装插件,Go语言社区,Golang程序员人脉社 ... [详细]
  • 本文讨论了在进行 MySQL 数据迁移过程中遇到的所有 .frm 文件报错的问题,并提供了详细的解决方案和建议。 ... [详细]
  • 近期在研究逆向工程,因此尝试了一些CTF题目。通过合天网络安全实验室的CTF实战演练平台(http://www.hetianlab.com/CTFrace.html),我对Linux逆向工程的掌握还不够深入,因此暂时跳过了RE300题目。首先从逆向100开始,将文件后缀名修改为.apk进行初步分析。这一过程不仅帮助我熟悉了基本的逆向技巧,还加深了对Android应用结构的理解。 ... [详细]
  • 帝国CMS中的信息归档功能详解及其重要性
    本文详细解析了帝国CMS中的信息归档功能,并探讨了其在内容管理中的重要性。通过归档功能,用户可以有效地管理和组织大量内容,提高网站的运行效率和用户体验。此外,文章还介绍了如何利用该功能进行数据备份和恢复,确保网站数据的安全性和完整性。 ... [详细]
  • 本指南详细介绍了如何在CentOS 6.6 64位系统上以root用户身份部署Tomcat 8服务器。系统环境为CentOS 6.6 64位,采用源码安装方式。所需软件为apache-tomcat-8.0.23.tar.gz,建议将软件下载至/root/opt目录。具体下载地址请参见官方资源。本指南涵盖了从环境准备到服务启动的完整步骤,适用于需要在该系统环境下搭建高性能Web应用服务器的技术人员。 ... [详细]
  • CSS3 @font-face 字体应用技术解析与实践
    在Web前端开发中,HTML教程和CSS3的结合使得网页设计更加多样化。长期以来,Web设计师受限于“web-safe”字体的选择。然而,CSS3中的`@font-face`规则允许从服务器端加载自定义字体,极大地丰富了网页的视觉效果。通过这一技术,设计师可以自由选择和使用各种字体,提升用户体验和页面美观度。本文将深入解析`@font-face`的实现原理,并提供实际应用案例,帮助开发者更好地掌握这一强大工具。 ... [详细]
  • 本文详细介绍了如何在Java Web服务器上部署音视频服务,并提供了完整的验证流程。以AnyChat为例,这是一款跨平台的音视频解决方案,广泛应用于需要实时音视频交互的项目中。通过具体的部署步骤和测试方法,确保了音视频服务的稳定性和可靠性。 ... [详细]
author-avatar
好好地经历这每一天
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有