如何理解RGW性能监控及源码实现

66次阅读
没有评论

共计 3079 个字符,预计需要花费 8 分钟才能阅读完成。

如何理解 RGW 性能监控及源码实现,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面丸趣 TV 小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

1
    性能计数器实现
 

性能计数器启动过程

#src/rgw/rgw_main.cc
int main(int argc, const char **argv)
 ...
 if (g_conf- daemonize) { global_init_daemonize(g_ceph_context);
 }
 Mutex mutex( main 
 SafeTimer init_timer(g_ceph_context, mutex);
 init_timer.init();
 mutex.Lock();
 init_timer.add_event_after(g_conf- rgw_init_timeout, new C_InitTimeout);
 mutex.Unlock();
 // Enable the perf counter before starting the service thread
 g_ceph_context- enable_perf_counter();
 ...
 r = rgw_perf_start(g_ceph_context); # 启用 rgw 计数器 

性能计数器参数说明

#src/rgw/rgw_common.cc
int rgw_perf_start(CephContext *cct)
 PerfCountersBuilder plb(cct, cct- _conf- name.to_str(), l_rgw_first, l_rgw_last);
 plb.add_u64_counter(l_rgw_req,  req ,  Requests  # 处理成功请求数量
 plb.add_u64_counter(l_rgw_failed_req,  failed_req ,  Aborted requests  # 处理失败请求数量
 plb.add_u64_counter(l_rgw_get,  get ,  Gets  #GET 请求数量
 plb.add_u64_counter(l_rgw_get_b,  get_b ,  Size of gets 
 plb.add_time_avg(l_rgw_get_lat,  get_initial_lat ,  Get latency 
 plb.add_u64_counter(l_rgw_put,  put ,  Puts  #PUT 请求数量
 plb.add_u64_counter(l_rgw_put_b,  put_b ,  Size of puts 
 plb.add_time_avg(l_rgw_put_lat,  put_initial_lat ,  Put latency 
 plb.add_u64(l_rgw_qlen,  qlen ,  Queue length 
 plb.add_u64(l_rgw_qactive,  qactive ,  Active requests queue 
 plb.add_u64_counter(l_rgw_cache_hit,  cache_hit ,  Cache hits  # 用于缓存 RGW 元数据的缓存命中次数
 plb.add_u64_counter(l_rgw_cache_miss,  cache_miss ,  Cache miss  # 未命中次数
 plb.add_u64_counter(l_rgw_keystone_token_cache_hit,  keystone_token_cache_hit ,  Keystone token cache hits 
 plb.add_u64_counter(l_rgw_keystone_token_cache_miss,  keystone_token_cache_miss ,  Keystone token cache miss 
 perfcounter = plb.create_perf_counters();
 cct- get_perfcounters_collection()- add(perfcounter);
 return 0;
}

性能计数器类型定义如下

#src/rgw/rgw_common.cc
enum {
 l_rgw_first = 15000,
 l_rgw_req,
 l_rgw_failed_req,
 l_rgw_get,
 l_rgw_get_b,
 l_rgw_get_lat,
 l_rgw_put,
 l_rgw_put_b,
 l_rgw_put_lat,
 l_rgw_qlen,
 l_rgw_qactive,
 l_rgw_cache_hit,
 l_rgw_cache_miss,
 l_rgw_keystone_token_cache_hit,
 l_rgw_keystone_token_cache_miss,
 l_rgw_last,
};

2
    如何使用计数器
 

方式 1

root@demo# ceph --admin-daemon /var/run/ceph-client.radosgw.en-zone1.asok perf dump
 cct : {
  total_workers : 32,
  unhealthy_workers : 0
 client.radosgw.en-zone1 : {
  req : 2,
  failed_req : 2,
  get : 0,
  get_b : 0,
  get_initial_lat : {
  avgcount : 0,
  sum : 0.000000000
 },
  put : 0,
  put_b : 0,
  put_initial_lat : {
  avgcount : 0,
  sum : 0.000000000
 },
  qlen : 0,
  qactive : 0,
  cache_hit : 0,
  cache_miss : 2,
  keystone_token_cache_hit : 0,
  keystone_token_cache_miss : 0
}

方式 2 (使用 Dumpling 以上版本)

root@demo# ceph daemon client.radosgw.en-zone1 perf dump
  cct : {
  total_workers : 32,
  unhealthy_workers : 0
 },
  client.radosgw.en-zone1 : {
  req : 2,
  failed_req : 2,
  get : 0,
  get_b : 0,
  get_initial_lat : {
  avgcount : 0,
  sum : 0.000000000
 },
  put : 0,
  put_b : 0,
  put_initial_lat : {
  avgcount : 0,
  sum : 0.000000000
 },
  qlen : 0,
  qactive : 0,
  cache_hit : 0,
  cache_miss : 2,
  keystone_token_cache_hit : 0,
  keystone_token_cache_miss : 0
 }

性能计数器一般人可能不太关注,但是将计数器数据推送到一些监控系统里面,同时添加一些告警策略,能够显著提升运维质量。同时通过源码层面去扩展计数器类型,从 ceph 内部去实现一些自定义数据的统计,也是一个不错的功能亮点。

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注丸趣 TV 行业资讯频道,感谢您对丸趣 TV 的支持。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-25发表,共计3079字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)