编程技术分享平台

网站首页 > 技术教程 正文

CI/CD之三:用filebeat,kafka,kylin,superset快速实现度量

xnh888 2024-10-13 10:14:50 技术教程 20 ℃ 0 评论

度量是CI/CD的基础,如何快速、低成本实现度量有助于形成产研团队的仪表盘,识别各个业务板块的真实价值和扎实程度。简单而言,我们需要这样的图和数据:


为什么度量是基础

了解事物的基本逻辑是看得着、想得清、做得到。CI/CD管理的目标是信息系统的各个组成部分,结合目前端、边、云、用的基本格局,我们的服务治理应该涵盖各个面客APP,云端服务,边缘服务器与设备终端等,典型如下图示。


但是不论如何,首先要建立度量能力,没有客观有效的度量,那么就是看不着准确的运作脉络,进而也就缺乏思考的前提和进一步操作执行的数据依据。所以度量是服务治理的基础,进一步就是服务的命名,服务的授权,频率限制等。

如何快速实现度量

可参考这些文章(【数据分析之四】【CI/CD之一】【CI/CD之二】),了解实现的背景。

面向用侧、边侧、端侧度量的基础是确保度量数据能够快速集中到云端,可以借助当前最广泛应用的http协议来进行收集,需要支持明细数据和统计数据的上报;而面向云侧的度量基础则可以基于每个节点的文件系统来进行收集。收集后的数据在每个节点进行汇总,或直接将明细数据上报到消息队列(可分为多层),然后再通过流式数据分析按照时间等维度进行计算,最后基于报表工具呈现看板。




远程收集 : nginx

支持明细和统计通过get上报,实现按日切分日志的能力,并将访问日志格式整理为json格式。

log_format  rpt_raw '{"ver":"$arg_ver",'
                                '"tm":"$arg_tm",'
                                '"caller":"$arg_caller",'
                                '"callee":"$arg_callee",'
                                '"duration":"$arg_duration",'
                                '"retcode":"$arg_retcode",'
								'"sign":"$arg_sign"'
                                '}';
	
	log_format  rpt_sts '{"ver":"$arg_ver",'
                                '"tm":"$arg_tm",'
                                '"caller":"$arg_caller",'
                                '"callee":"$arg_callee",'
                                '"avg_duration":"$arg_avg_duration",'
                                '"max_duration":"$arg_max_duration",'
                                '"min_duration":"$arg_min_duration",'
                                '"total_count":"$arg_total_count",'
                                '"count_of_retcode_0":"$arg_count_of_retcode_0",'
                                '"count_of_retcode_1":"$arg_count_of_retcode_1",'
								'"sign":"$arg_sign"'
                                '}';				

# in virtual server config for example:
server {
        listen       8080;
        server_name  localhost;
        location /rpt_raw/ {
            root   html;
            index  index.html index.htm;
			
			if ($time_iso8601 ~ '(\d{4}-\d{2}-\d{2})') {
				set $tttt $1;
			}
			access_log  logs/rpt_raw-$tttt.log  rpt_raw;
        }
        location /rpt_sts/ {
            root   html;
            index  index.html index.htm;
			
			if ($time_iso8601 ~ '(\d{4}-\d{2}-\d{2})') {
				set $tttt $1;
			}
			access_log  logs/rpt_sts-$tttt.log  rpt_sts;
        }
  }



远程上报 :remote-report

支持明细数据和统计过的数据上报,对于边缘服务器、计算能力足够的端侧,鼓励使用统计过的数据上报,这样可节省流量。

http://127.0.0.1:8080/rpt_raw/?ver=1&tm=1647070125&caller=aa&callee=bb&duration=100&retcode=0&sign=bcde
http://host:port/rpt_raw??ver=1&tm=1&caller=aa&callee=bb&duration=100&retcode=0&sign=bcde

http://127.0.0.1:8080/rpt_sts/?ver=1&tm=1647070125&caller=aa&callee=bb&max_duration=100&avg_duration=100&min_duration=100&retcode=0&sign=bcde&total_count=100&count_of_retcode_0=90&count_of_retcode_1=10
http://host:por/rpt_sts/?ver=1&tm=1&caller=aa&callee=bb&max_duration=100&avg_duration=100&min_duration=100&retcode=0&sign=bcde&total_count=100&count_of_retcode_0=90&count_of_retcode_1=10


本地上报:local-report

本地上报实际就是输出一个AOF日志文件,与nginx配置生成的日志一样,其形式如下:

明细日志样例格式如下:

{"ver":"1","tm":"1647070125","caller":"aa","callee":"bb","duration":"100","retcode":"0","sign":"bcde"}

统计日志样例格式如下:

{"ver":"1","tm":"1647070125","caller":"aa","callee":"bb","avg_duration":"100","max_duration":"100","min_duration":"100","total_count":"100","count_of_retcode_0":"90","count_of_retcode_1":"10","sign":"bcde"}

日志采集 : filebeat

将生成的json格式日志文件,推送到消息队列,并将json的内容纳入平级,不要用message字段包装,以便于kylin分析。

filebeat也提供了几个处理器,可以使用script等做简单的校验。这里使用的配置如下:

filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /home/release/backup/filebeat-8.0.1-linux-x86_64/log/fb*.log
#keys_under_root可以让字段位于根节点,默认为false
  json.keys_under_root: true
##对于同名的key,覆盖原有key值
  json.overwrite_keys: true
##message_key是用来合并多行json日志使用的,如果配置该项还需要配置multiline的设置,后面会讲
#  json.message_key: message
##将解析错误的消息记录储存在error.message字段中
  json.add_error_key: true

processors:
  - drop_fields:
      fields: ["@metadata","ecs","log_type", "input_type", "offset", "beat", "source","type","agent","host","input","log","version"]

output.kafka:
  hosts: ["127.0.0.1:9092"]
  topic: fb_log_collect
  keep_alive: 10s


度量与统计 :kylin

增加流式数据源,增加模型,增加分析,启用并执行。如下图:




可以使用crontab创建定时任务来,确保持续构建,数据可持续同步到kylin。


可视化服务 :superset

select DAY_START,HOUR_START,MINUTE_START, caller,callee,retcode,count(1) as TOTAL,
  max(duration) as MAXD,sum(duration)/count(1)  as AVGD from stream_sc_min group by caller,callee,retcode,MINUTE_START,DAY_START,HOUR_START


Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表