来自:DBAplus社群

作者介绍

小火牛,项目管理高级工程师,具有多年大数据平台运维管理及开发优化经验。管理过多个上千节点集群,擅长对外多租户平台的维护开发。信科院大数据性能测试、功能测试主力,大厂PK获得双项第一。

前言

某业务导致NameNode RPC通信频繁,后来观察监控发现,是由于该业务获取HDFS列表文件的频率过于频繁。检查代码后,优化由20s获取一次目录列表改为5分钟获取一次,获取列表的RPC操作次数下降了约1.5倍,平均每秒减少了2~3w次的RPC操作。

还有很多业务场景,通过分析观察RPC画像,都发现了其不合理性,这里就不一一列举了。本文主要记录如何通过ELK快速分析NameNode RPC操作并对接Grafana展示。

通过ELK快速分析NameNode RPC操作

ELK是当前比较主流的分布式日志收集处理工具。这里采用Filebeat→Kafka集群→Logstash→ES→Kibana。

采用原因:

1)Filebeat是基于原先logstash-forwarder的源码改造出来的。换句话说:Filebeat就是新版的logstash-forwarder,也会是Elastic Stack在shipper端的第一选择。

2)小贴士:虽然LogStash::Inputs::TCP用Ruby的Socket和OpenSSL库实现了高级的SSL功能,但Logstash本身只能在SizedQueue中缓存20个事件。这就是我们建议在生产环境中换用其他消息队列的原因。

而Redis服务器是Logstash官方推荐的Broker选择,Broker角色也就意味着会同时存在输入和输出两个插件。

Kafka是一个高吞吐量的分布式发布订阅日志服务,具有高可用、高性能、分布式、高扩展、持久性等特性。目前已经在各大公司中广泛使用。和之前采用Redis做轻量级消息队列不同,Kafka利用磁盘作队列,所以也就无所谓消息缓冲时的磁盘问题。此外,如果公司内部已有Kafka服务在运行,Logstash也可以快速接入,免去重复建设的麻烦。

3)目前Logstash1.5版本已自带支持Kafka插件,所以只需要学会如何书写Logstash规则,并且Kafka消费使用high-level消费。

4)Filebeat部署在应用服务器上(只负责Logstash的读取和转发,降低CPU负载消耗,确保不会抢占应用资源),Logstash、ES、Kibana在一台服务器上(此处的Logstash负责日志的过滤,会消耗一定的CPU负载,可以考虑如何优化过滤的语法步骤来达到降低负载)。

具体搭建步骤:Filebeat安装使用(思考后决定Filebeat使用Zip安装或者tar.gz方便修改配置打包分发。)→Logstash插件配置。

以下是架构图:

1、Filebeat采集hdfs-audit.log日志传输给Kafka或者Logstash

[hadoop@lf319-m3-002 filebeat]$ vi dynamically.config/audit-logstash.yml

filebeat.prospectors:

- input_type: log

paths:

- "/var/log/hadoop-hdfs/hdfs-audit.log"

harvester_buffer_size: 32768

scan_frequency: 1s

backoff: 10ms

#backoff <= max_backoff <= scan_frequency

processors:

- drop_fields:

fields: ["beat", "beat.name", "beat.hostname","beat.version","input_type","offset","@timestamp","type","source"]

output.logstash:

hosts: ["logstash-host:5044"," logstash-host:5045"]

loadbalance: true

worker: 4

bulk_max_size: 4096

#output.console:

#  pretty: true

xpack.monitoring:

enabled: true

elasticsearch:

hosts: ["https://es-host1:9200", "https:// es-host2:9200"]

username: beats_system

password: beat@123

2、Logstash进一步分解日志,格式化日志数据

这里需要我们先查看下日志的格式,然后选择方便的日志格式化方式来解析日志。

日志格式案例:

2019-08-25 13:11:58,630 INFO FSNamesystem.audit: allowed=true ugi=lf_zh_pro (auth:SIMPLE) ip=/dn-ip cmd=getfileinfo src=/user/lf_zh_pro/test/CommonFilter/sync/biz_id=B43/day_id=20190825/prov_id=089/part-00019-1566675749932.gz dst=null perm=null proto=rpc

2019-08-25 13:11:58,630 INFO FSNamesystem.audit: allowed=true ugi=lf_xl_bp (auth:SIMPLE) ip=/dn-ip cmd=create src=/user/lf_xl_bp/lf_xl_src.db/src_d_trip_all/date_id=20190825/hour_id=13/minute_id=00/.hive-staging_hive_2019-08-25_13-10-18_301_9180087219965934496-1/_task_tmp.-ext-10002/prov_id=031/_tmp.000238_0dst=null perm=lf_xl_bp:lf_xl_bp:rw-rw-r-- proto=rpc

2019-08-25 13:11:58,630 INFO FSNamesystem.audit: allowed=true ugi=ubd_obx_test (auth:SIMPLE) ip=/ dn-ip cmd=rename

通过观察可以发现上面的每条日志格式都是一致的,都由时间戳、日志级别、是否开启审计、用户、来源IP、命令类型这几个字段组成。那么相较于grok来说dissect更加简明。

Dissect的使用规则:https://www.elastic.co/guide/en/logstash/current/plugins-filters-dissect.html

Logstash配置如下:

input {

beats {

port => "5045"

}

}

filter {

if "/user/if_ia_pro/output/test" in [message] {

dissect {

mapping => { "message" => "%{logd} %{drop} %{level} %{log-type}: %{?allowed}=%{&allowed} %{?ugi}=%{&ugi} (%{?authtype}) %{?ip}=/%{&ip} %{?cmd}=%{&cmd} %{}=/user/if_ia_pro/output/test/%{src2}/%{src3}/%{} %{?dst}=%{&dst} %{?perm}=%{&perm} %{?proto}=%{&proto}" }

add_field => {

"srctable" => "/user/if_ia_pro/output/test/%{src2}/%{src3}"

"logdate" => "%{logd} %{drop}"

}

remove_field => ['message','src2','src3','logd','drop']

}

}

else if "/user/lf_zh_pro/lf_safedata_pro/output/" in [message] {

dissect {

mapping => { "message" => "%{logd} %{drop} %{level} %{log-type}: %{?allowed}=%{&allowed} %{?ugi}=%{&ugi} (%{?authtype}) %{?ip}=/%{&ip} %{?cmd}=%{&cmd} %{}=/user/lf_zh_pro/lf_safedata_pro/output/%{src2}/%{} %{?dst}=%{&dst} %{?perm}=%{&perm} %{?proto}=%{&proto}" }

add_field => {

"srctable" => "/user/lf_zh_pro/lf_safedata_pro/output/%{src2}"

"logdate" => "%{logd} %{drop}"

}

remove_field => ['message','src2','drop']

}

}

else if "/files/" in [message] {

dissect {

mapping => { "message" => "%{logd} %{drop} %{level} %{log-type}: %{?allowed}=%{&allowed} %{?ugi}=%{&ugi} (%{?authtype}) %{?ip}=/%{&ip} %{?cmd}=%{&cmd} %{}=/files/%{src2}/%{} %{?dst}=%{&dst} %{?perm}=%{&perm} %{?proto}=%{&proto}" }

add_field => {

"srctable" => "/files/%{src2}"

"logdate" => "%{logd} %{drop}"

}

remove_field => ['message','src2','drop']

}

}

else {

dissect {

mapping => { "message" => "%{logd} %{drop} %{level} %{log-type}: %{?allowed}=%{&allowed} %{?ugi}=%{&ugi} (%{?authtype}) %{?ip}=/%{&ip} %{?cmd}=%{&cmd} %{}=/%{src}/%{src1}/%{src2}/%{src3}/%{} %{?dst}=%{&dst} %{?perm}=%{&perm} %{?proto}=%{&proto}" }

add_field => {

"srctable" => "/%{src}/%{src1}/%{src2}/%{src3}"

"logdate" => "%{logd} %{drop}"

}

remove_field => ['message','src','src1','src2','src3','logd','drop']

}

}

date {

match => [ "logdate","ISO8601" ]

target => "@times"

remove_field => ['logdate']

}

}

output {

elasticsearch {

hosts => ["es-host:9200"]

index => "logstash-hdfs-auit-%{+YYYY.MM.dd}"

user => "elastic"

password => "password"

}

stdout {  }

}

3、ES上观察数据

Filebeat和Logstash配置好采集分析hdfs-audit.log之后启动进程,到ES上观察会发现创建有logstash-hdfs-auit- YYYY.MM.dd的index。

具体查看数据,可以看到已经具备多个需要使用到的字段。

Grafana配置NameNode RPC操作

最后一步就需要在Grafana上配置连接ES数据库。

然后创建Dashboard依次配置以下几种查询展示:

1)集群整体RPC每分钟连接次数

2)HDFS路径All下All类型每分钟操作计数

3)All类型操作计数最多的hdfs路径

4)路径All下操作计数排行前五的类型 和All操作类型下操作计数前五的路径

总结

那么现在对于企业来说,不管是在物理机上还是云上,玩自己的大数据平台跑生产任务,就不可避免会有不够合理不够优化的任务,比如最简单的集群对拷任务出现异常中断时,我们通常会挂定时任务并对hadoop distcp添加-update参数,进行对比更新覆盖,这时当定时吊起的过于频繁,就会发现当对拷目录下文件数越来越多,NameNode对该目录的listStatus类型的RPC连接会激增,这时我们就需要优化对拷任务。

RPC的监控只是监控大数据平台的一个指标,这里通过这篇文章,带大家了解下如何快速地采集分析平台日志,并进行展示监控。

长按订阅更多精彩▼如有收获,点个在看,诚挚感谢

如何快速采集分析平台日志,并进行展示监控?相关推荐

  1. ELK(Elasticsearch+Filebeat+Kibana) 轻量级采集分析Nginx日志

    ELK是什么? 轻量级日志统计分析组件,包含elasticsearch.filebeat.kibana ELK环境准备 Elasticsearch 下载地址 https://www.elastic.c ...

  2. Linux与云计算——第二阶段Linux服务器架设 第七章:网站WEB服务器架设—日志分析平台...

    Linux与云计算--第二阶段Linux服务器架设 第七章:网站WEB服务器架设-日志分析平台 日志分析:AWstats 安装AWstats分析http日志信息. [1] Install AWstat ...

  3. 手把手教你如何快速搭建 ELK 实时日志分析平台

    本篇文章主要是手把手教你搭建 ELK 实时日志分析平台,那么,ELK 到底是什么呢? ELK 是三个开源项目的首字母缩写,这三个项目分别是:Elasticsearch.Logstash 和 Kiban ...

  4. 大数据主题分享第三期 | 基于ELK的亿级实时日志分析平台实践

    猫友会希望建立更多高质量垂直细分社群,本次是"大数据学习交流付费群"的第三期分享. "大数据学习交流付费群"由猫友会联合,斗鱼数据平台总监吴瑞诚,卷皮BI技术总 ...

  5. ELK实时日志分析平台环境部署--完整记录

    在日常运维工作中,对于系统和业务日志的处理尤为重要.今天,在这里分享一下自己部署的ELK(+Redis)-开源实时日志分析平台的记录过程(仅依据本人的实际操作为例说明,如有误述,敬请指出)~ ==== ...

  6. 腾讯技术课|基于Elastic Stack 搭建日志分析平台

    为了让读者们可以更好的理解「如何基于Elastic Stack 搭建日志分析平台」,腾讯技术工程公众号特别邀请腾讯基础架构部的陈曦工程师通过语音录播分享的方式在「腾讯技术课」小程序里同步录制了语音+P ...

  7. logstash 吞吐量优化_1002-谈谈ELK日志分析平台的性能优化理念

    在生产环境中,我们为了更好的服务于业务,通常会通过优化的手段来实现服务对外的性能最大化,节省系统性能开支:关注我的朋友们都知道,前段时间一直在搞ELK,同时也记录在了个人的博客篇章中,从部署到各个服务 ...

  8. ES 集中式日志分析平台 Elastic Stack(介绍)

    一.ELK 介绍 ELK 构建在开源基础之上,让您能够安全可靠地获取任何来源.任何格式的数据,并且能够实时地对数据进行搜索.分析和可视化. 最近查看 ELK 官方网站,发现新一代的日志采集器 File ...

  9. 企业项目实战---ELK日志分析平台之logstash数据采集(二)

    ELK日志分析平台 logstash数据采集 1.logstash简介 2.Logstash安装 3.标准输入到标准输出 4.标准输入到文件 5.标准输入到es主机 6.指定文件输入到es主机 7.s ...

最新文章

  1. 【读书笔记-数据挖掘概念与技术】聚类分析:基本概念和方法
  2. 开始报名!首次阿里巴巴经济体双 11 云原生实践展示
  3. 深入了解以太坊虚拟机第4部分——ABI编码外部方法调用的方式
  4. Oracle中查看所有表和字段
  5. 解决 /lib64/libc.so.6: version `GLIBC_2.18' not found (required by /lib64/libstdc++.so.6)
  6. ServerSocketChannel的使用例子
  7. 三年级计算机第一学期期末试题,三年级上册信息技术期末考试试卷(清华版)
  8. Linux x86-64 IOMMU详解(三)——Intel IOMMU(硬件IOMMU)的功能与基本原理
  9. html制作dnf,DNF教你如何不花一分钱制作90顶级史诗
  10. Win10 如何将40G大文件极致压缩
  11. 扒一扒随机数(Random Number)的诞生历史
  12. DOM详解(五):DOM常用对象
  13. Tensor (张量) - 神经网络中的数据结构
  14. Python 爬虫下一代网络请求库 httpx 和 parsel 解析库测评
  15. SpringBoot中使用AMQ的两种方式(Java配置、注解方式)
  16. 干货分享 | 速速围观,想要BIM落地,这些应用阶段都不可或缺
  17. 城堡游戏 java
  18. python编程基础(lv3_第五课)
  19. java程序员的相亲指南,你确定不看看吗?
  20. 日积月累Day6(为什么家庭会生病)

热门文章

  1. P4755 Beautiful Pair (数据结构+分治)
  2. HDU 3333-Turing Tree(线段树解决离线询问)
  3. Codeforces Round #650 (Div. 3)(A-F1)题解
  4. Codeforces Round #648 (Div. 2)题解 A-D
  5. CodeForces - 960F[动态开点线段树优化dp]详解
  6. 如何判断软件功能特性的依赖?
  7. centos7安装tomcat8.5
  8. 在北京做Java开发如何月薪达到两万,需要技术水平达到什么程度?
  9. OpenResty+Keepalived组建高可用集群+双主模式
  10. 使用XML作为配置表,WinForm程序读取配置表来动态显示控件