XinyiZhou xinyizhou@pptv.com 11/5 2012 PPTV LB日志实时分析平台 XinyiZhou xinyizhou@pptv.com 11/5 2012.

Slides:



Advertisements
Similar presentations
完美殺人筆記簿 【爸!我受夠了!】 第七組組員: 林正敏 陳筱涵 李蓓宇 許純宜 羅玉芬 謝文軒.
Advertisements

维普考试服务平台使用指南. 资源与应用的有机整合 资源与应用并举。 职业资格考试、高校课 程试题、在线考试、移 动应用 4 个模块。 在线考试与系统题库资 源的完美整合。 1 多模块 2 在线考试 3 移动端 移动端的资源复用。
本章重点内容  SMB 协议和 Samba 简介  安装和启动 Samba  配置 Samba 文件共享  配置 Samba 打印共享  在 Linux 环境下访问 Samba 共享.
第七讲 管理类文体写作 管理类文书分为两类:公文、事务文书。 一,公文概述(教材P174-) (一)定义、范围、类别:
第七章 Internet网络应用.
第五章 网络服务组件.
动态网站开发 【HTTP与网络基础】 李博杰
无锡商业职业技术学院 机电工程学院党总支孙蓓雄
上課教材 Database Slide Windows筆電 (32 bit)
Mico的架构之旅 魏佳 Co-Founder & Mico Inc..
全面了解入党程序 认真履行入党手续 第一讲 主讲人:陈亭而.
中共湖北大学知行学院委员会党校 入党材料规范填写指导 学工处 李华琼 二〇一三年十二月.
MongoDB技术交流 主讲:刘天斯.
基于CloudFoundry的私有云平台
彰化縣教師會 導護問題知多少? 理事長:許麗芳老師 報告人:廖銘潭老師   .
陶板屋 組員:陳婷 劉峻愷 趙崇佑 陳鵬如.
网络条件下老干部工作信息的应用与写作 齐齐哈尔市委老干部局 山佐利.
咨询师的个人成长 第一课:如何撰写个人成长报告以及答辩.
第6章 資料庫管理系統 6-1 關聯式資料庫管理系統 6-2 SQL Server資料庫管理系統
电话联系.
迎宾员礼仪 包头机电工业职业学校管理系 白琳 1.
Windows系統 入侵偵測與防制工具 成大計網中心 楊峻榮 2003/10/23.
第八組 組員:07黃佩瑄 13吳姿毅 14葉芷芸 26黃欣蓮 34林思妤 48潘婷蓉
上海市绩效评价培训 数据分析与报告撰写 赵宏斌 上海财经大学副教授
國立花蓮女中101學年度 開學典禮簡報.
计算机系统安全 第10章 常用攻击手段.
《计算机网络技术》系列课件之一 Internet的地址管理 制作:马 松 单位:鞍山市信息工程学校.
财 务 会 计 第四篇:供应链会计实务 制作人:谌君、熊瑜.
Microsoft Application Center Test
通 知 通知是批转下级机关的公文,转发上级机关和不相隶属机关的公文,传达要求下级机关办理和需要有关单位周知或执行的事项,任免人员时使用的公文。
Lab312.
Python金融数据分析教程 解放你的python编程能力 第4关 如何获取金融数据 Python金融数据分析教程 1.
第 3 章 SQL Server 2000 伺服器管理初步.
Web Server 架設.
主講人:葉致偉 交大校園網路策進會 臺灣學術網路竹苗區域網路中心 89年網路教育推廣訓練課程 Proxy Server 規劃管理 主講人:葉致偉 交大校園網路策進會
系統與網路管理工具.
【VA虚拟应用管理平台】专题培训 资源管理及个性化 陕西益和信息技术开发有限责任公司 2011年2月.
鄭士康 國立台灣大學 電機工程學系/電信工程研究所/ 資訊網路與多媒體研究所
預官考試輔導 計算機概論提要 91年12月4日.
自動化課程 劉聖元.
指導老師: 楊金山 班級: 電商四乙 姓名: 劉丞哲 學號: 4A155097
任务调度架构变迁史 知道创宇 杨冀龙.
第二章 防火墙基础技术.
Linux防火牆與NAT架設 2013/02/03.
——网鸟老兵系列课程之10天掌握MongoDB
電子商務網站架設技術 利用FB做Login
第六章 安全衛生工作守則 6-1 前 言  6-2 訂定依據相關法令規定  6-3 工作守則製作程序及製作前應注意事項  6-4 如何訂定適合需要之安全衛生工作守則  6-5 結 論.
基于Docker的分布式服务研发实践 天云软件 葛林
Web Server 王宏瑾.
檔案類型介紹 Linux 的檔案類型 目錄: 用ls –F時檔名後面有/,螢幕列出目錄時為藍色 可執行檔: 壓縮檔: 連結檔:
Wireshark DNS&HTTP封包分析
VSB9网站群管理平台 系统管理.
VSB9网站群管理平台 系统管理.
【VA虚拟应用管理平台】专题培训 资源管理及个性化 陕西益和信息技术开发有限责任公司 2011年2月.
第 14 章 DHCP 著作權所有 © 旗標出版股份有限公司.
微軟資安稽核解決方案 System Center 2012
Logistics Enterprise 新手指南 系統資料操作
主要内容: 活动目录的基本知识 活动目录的安装 构造域帐户 安全策略的设置 设置共享文件夹 安装网络打印机
Javascript 基础 面向非JS语言的开发人员.
TYPE B 3504A設定 使用瀏覽器連線到閘道器的ip 例如:
TYPE A 3702A設定 使用瀏覽器連線到閘道器的ip 例如:
實驗三 : MGCP 實驗目的 使同學瞭解MGCP模擬程式和基本通話流程,熟悉MGCP的命令與訊息,並了解Call Agent程式的運作,並學會開發新的通話服務。 實驗原理 修改 CA 以開發新服務 SS7 CA SG MGCP TGW RGW CO PSTN RTP.
數位化時代教師的基本素養講習會 電腦科技 與智慧財產權法
暫借款及暫借款沖銷 就源輸入作業 長庚大學 會計室 製.
第6章 层次原理图设计和多通道技术: 重点内容: 掌握自上而下的层次原理图设计方法 掌握自下而上的层次原理图设计方法
第1章 WWW和LAMP基本觀念.
大数据应用人才培养系列教材 数据挖掘基础 刘 鹏 张 燕 总主编 陶建辉 主编 姜才康 副主编.
8的乘法口诀 导入 新授 练习.
Presentation transcript:

XinyiZhou xinyizhou@pptv.com 11/5 2012 PPTV LB日志实时分析平台 XinyiZhou xinyizhou@pptv.com 11/5 2012

Agenda PPTV LB日志实时分析系统介绍 系统实现 应用实例 实际面临的问题 解决方案 系统部署 Fluentd(td-agent) MongoDB Python Script(PyMongo module) Zabbix 应用实例 Nginx return code 4xx 5xx 监控 Nginx响应时间监控 告警邮件自动分析程序 LB日志实时分析与自动Release平台的集成

实际面临的问题 PPTV采用Nginx+Keepalived的方式构建Load Balancer,共有约40台LB server,每台承载10-50个域名的流量,我们需要精确的把握所有域名的健康状态(返回码是否正常,4xx/5xx率),及响应时间变化趋势;能够准实时的发现入侵行为; 难点: 日志量大 – 每台LB每天都有几百GB日志(压缩前) 日志分散不易进行统一分析 难以添加有效监控

解决方案(一) awk+grep+bash+gnuplot 最方便的一招,比较灵活,计算准确;但实际使用不方便,看一个域名的日志需要登陆好几台LB E.g. 统计非200的top return code awk '{if ($9 ~ /^[0-9]*$/ && $9 != "200" && $9 !~ /^3/) code[$9]++}END {for ( i in code ) print i " " code[i]}'|sort -k2 –nr 使用gnuplot对统计结果绘图 cut –d’’ –f1-4 log.txt | uniq –c | (echo “plot “-” using 2:1 with lines”;cat)|gnuplot

解决方案(二) Python+zabbix 每台LB均部署python日志分析脚本,通过zabbix调度,每隔五分钟对前五分钟生产的日志文件进行分析,保留分析结果; Zabbix负责绘图和告警; 主要两个缺点: 1)性能瓶颈,日志分析占用大量LB CPU资源 2)不够灵活,日志分析局限于单台LB

解决方案(三) Fluentd+Mongodb+Python+zabbix Fluentd实时收集LB日志,JSON化,存入中央Mongodb Python程序查询Mongodb数据进行实时计算;计算结果存入zabbix;zabbix负责告警及图形展现 P.S. That’s what we want!!

Fluentd/Mongodb架构图

Fluentd介绍 开源日志收集工具 http://fluentd.org/ LOG everything as JSON! JSON:Schema-free, add/remove field from logs at anytime 原始日志: “2012-10-01 host1 myapp: message size=1000 user=xyz” JSON: 2012-10-01 myapp.message { “hostname”: ”host1”, “size”: 1000, “user”: “xyz” }

Fluentd/Mongodb数据流图

Fluentd plugin说明(1) 在不使用plugin的情况下Fluentd仅仅是将日志输入转化为JSON格式输出的工具;各类plugin极大拓展了Fluentd的功能 Fluentd plugin有如下三种: Input plugin 定义日志来源标准化,输入的格式 Buffer plugin 定义fluentd缓存的配置以实现可靠性 Output Plugin 定义输出的格式及目的地,可以是文件,网络,数据库,etc

Fluentd plugin说明(2) Fluentd Input Plugin http tail foward exec 让fluentd从http client获取数据 tail tail是最常用的input plugin; <source> type tail path /var/log/httpd-access.log #tail监听的文件地址 tag apache.access #每个输入需要一个特定标签以区别 format apache|syslog|自定义正则 #format可以灵活自定义 </source> foward 将其他fluentd/fluent-cat命令的输出作为该fluentd的输入; exec 通过执行外部命令,以命令执行的结果作为fluentd的输入;

Fluentd plugin说明(3) Fluentd Output Plugin Ouput Plugin用于存储Fluentd收集来的数据;目前有很多开源的plugin,如:fluentd-flume,fluentd-splunk,fluentd-cassandra,fluentd-scribe,fluentd-mongodb fluent-plugin-mongo 0.6.10 Output plugin中最完美的当属mongodb plugin,因为Fluentd/Mongodb都以JSON为基础;mongodb良好的插入查询性能可以顶住海量日志实时分析的压力;mongodb的capped collection很好的解决了日志定量轮转的问题

MONGODB部署 每个机房部署一台mongodb server,用于收集该机房全部LB的日志 每个mongodb部署多个instance,每个instance对应一台LB server 建立多个collection,每个collection保存一个域名的日志信息 一定要使用capped collection!

MONGODB配置 port = 270XX dbpath = /home/mongodb/node270xx logpath = /home/mongodb/node270xx.log syncdelay = 10 #这个设置10秒左右,将IO压力平均化,避免sync时影响查询性能 maxConns = 20000 oplogSize = 1024 directoryperdb = on logappend = on journal = off fork = on nohttpinterface = on

Fluentd部署 每台LB上均需安装一个Fluentd agent;使用TreasureData公司yum源上提供的td-agent rpm包安装即可; 启动方法 /etc/init.d/td-agent start 关键配置/etc/td-agent/td-agent.conf 日志文件 /var/log/td-agent/td-agent.log

PPTV Fluentd Input配置 <source> type tail path /home/logs/nginx/aplus-access.log pos_file /var/log/td-agent/tmp/aplus.pptv.com.pos format /^(?<ip>[^ ]*) (?<domain>[^ ]*) - ([^ ]*) ([^ ]*) "(?<url>[^"]*)" (?<code>[^ ]*) (?<bsize>[^ ]*) ("[^"]*") ("[^"]*") ("[^"]*") "(?<restime>[^"]*)" "(?<backend>[^,"]*)[^"]*" "(?<bcode>[^,"]*)[^"]*" "(?<nginxtime>[^"]*)"$/ tag mongo.aplus.pptv.com.access </source>

PPTV Fluentd Output配置 <match mongo.aplus.pptv.com.access> type mongo database LB_hostname collection aplus.pptv.com.access host mongodb_host port mongodb_port capped capped_size 180m #确保能够保留最近1小时该域名的日志 ignore_invalid_record true buffer_type memory #使用内存作为buffer存储方式 buffer_chunk_limit 1M buffer_queue_limit 15 retry_limit 10 retry_wait 1s flush_interval 1s #刷新频率为1s,基本做到实时 </match>

PPTV日志样例 原始日志: 218.26.242.14 999.fb.app.aplus.pptv.com - [05/Nov/2012:15:42:38 +0800] "GET /recommend_pop/?_=1352101423806 HTTP/1.0" 200 34 "http://v.pptv.com/show/MLibyMJjibbqyJB28.html" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C)" "60.211.95.201, 127.0.0.1" "0.012" "10.201.10.94:80" "200" "0.012“ MONGODB中的日志: { "_id" : ObjectId("5097755c31d87b09f8046f1f"), "ip" : " 218.26.242.14", "domain" : "999.fb.app.aplus.pptv.com", "url" : " GET /recommend_pop/?_=1352101423806 HTTP/1.0", “code” : “200”, #返回码 "bsize" : “34", #bodysize “restime” : “0.012”, #后端服务响应时间 “backend” : “10.201.10.94:80”, #后端服务地址 “bcode” : “200”, #后端服务返回码 “nginxtime” : “0.012”, #nginx响应时间 "time" : ISODate("2012-11-05T15:42:38Z") }

PPTV LB日志分析逻辑(1) 为LB日志自动生成fluentd配置文件: 对某台/log/nginx/*.access.log和*.error.log: 根据LB所在机房分配后端mongodb地址/端口,根据历史日志大小分配capped collection size,根据LB机器名分配mongodb database_name,根据域名确定mongodb collection name.

PPTV LB日志分析逻辑(2) 保存域名-LB-后端主机的对应关系,并定期更新(parse nginx配置文件) > db.domain_host_info.find({domain:"aplus.pptv.com"}) { "_id" : ObjectId("5096bc7b19859831d6000002"), "domain" : "aplus.pptv.com", "host" : “lb1", "backend" : “host1" } { "_id" : ObjectId("5096bc7b19859831d6000003"), "domain" : "aplus.pptv.com", "host" : " lb1", "backend" : “host2" } { "_id" : ObjectId("5096bc7b19859831d6000004"), "domain" : "aplus.pptv.com", "host" : “lb2", "backend" : “host3" } { "_id" : ObjectId("5096bc7b19859831d6000005"), "domain" : "aplus.pptv.com", "host" : “lb2", "backend" : “host4" }

PPTV LB日志分析逻辑(3) 每五分钟对前五分钟mongodb收集到的日志基于域名进行汇总计算(python/pymongo),得出结果存入mongodb中的lb_detail表: > db.lb_detail.findOne() { "_id" : ObjectId("509434522573b0625d000002"), “domain” : “xxxxx.pptv.com”, #分析的域名 “ng1_count” : 0, #nginx请求时间超过1秒个数 “be1_count” : 0, #backend后端响应时间超过1秒个数 “total_count” : 2703, # 过去5分钟该域名的请求总数 “backtime_total” : 6.71, # backend后端响应时间总和 “bodysize_total” : 124100, #bodysize总和 “xx4_count” : 2, #4xx请求个数 "time" : ISODate("2012-11-03T05:00:02.634Z"), “ng3_count” : 0, #nginx请求总时间大于3秒的请求个数 “c200_count” : 2700, #200请求个数 “xx5_count” : 1, #5xx请求个数 “ngxtime_total” : 7.191, #nginx请求总时间 “be3_count” : 0 #backend响应时间超过3秒的个数 }

PPTV LB日志分析逻辑(4) 每五分钟对前五分钟mongodb收集到的日志基于后端机器进行汇总计算(python/pymongo),得出结果存入mongodb中的backend_detail表: > #某域名xxxx.pptv.com中某后端机器(backend_ip:80)过去5分钟的4xx/5xx/响应时间/超时次数情况 > db.backend_detail.findOne() { "_id" : ObjectId("509677552573b02445000004"), "bk_xx5_count" : 183, "bk_be3_count" : 62, "bk_ng3_count" : 65, "bk_body_size_total" : 214842812, "bk_ngx_time_total" : 1443.1720000000564, "bk_be1_count" : 83, "domain" : “xxxx.pptv.com", "bk_total" : 25378, "server" : “LB_NAME", "bk_back_time_total" : 1233.362000000008, "bk_c200_count" : 25140, "time" : ISODate("2012-11-04T22:10:29.004Z"), "bk_xx4_count" : 42, "bk_ng1_count" : 109, "backend" : “backend_ip:80" }

PPTV LB日志分析逻辑(5) 对前面(3),(4)实时分析得出的结果,配置zabbix监控项进行采集、绘图 Zabbix监控脚本使用python/pymongo查询mongodb中lb_detail/backend_detail表获取过去5分钟 某域名的总请求数/2xx率/4xx率/5xx率/平均响应时间/后端响应超过1秒的比率等

Zabbix监控(1) 建立zabbix LB_log_mining监控模板,对每个域名建立总请求数,4xx/5xx数,后端平均响应时间,nginx响应时间,bodysize平均大小,响应时间>1秒比例,响应时间>3秒比例 (每五分钟采集一次)

Zabbix监控(2)

Zabbix监控(3) 如上页所示,某域名的总请求数、4xx、5xx比率,平均响应时间,均可以在zabbix中查看变化趋势;针对4xx、5xx率特别高或者响应时间>3秒的比率特别高的,可以进行实时告警; 告警邮件见下图;

Zabbix监控(4) Zabbix告警邮件实例;

The End