上传项目图片:“Percona Toolkit”雷竞技下载官网
  1. 雷竞技下载官网Percona工具包
  2. pt - 1571

Pt-secure-collect使用了错误的正则表达式来混淆主机名

    XML 可打印的

细节

    • 错误
    • 状态: Done">完成
    • 解决方法: 固定
    • 没有一个
    • 此处
    • 没有一个
    • 没有一个

    描述

      当使用pt-secure-collect时,某些输出由于使用了错误的正则表达式进行主机名检测而变得不可读。

      例如:

      top - 19:49:33 up 10天,16:11,1个用户,负载平均:主机名主机名0.17任务:127 total, 1运行,126睡眠,0停止,0僵尸%Cpu(s): 21.7 us, 34.8 sy, 0.0 ni, 43.5 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem: 3881748 total, 142512 free, 1898868 used, 1840368 buff/cache KiB Swap: 1572860 total, 1572820 free, 40 used。1602908 avail Mem PID USER PR NI VIRT RES SHR S %CPU % Mem TIME+ COMMAND 5304 vagrant 20 0 1983280 hostname 12272 S 6.2 35.8 456:hostnameprometheus 5313 root 20 0 142100 16952 5428 S 6.2 0.4 189:hostnamenode_expor+ 10559 mysql 20 0 1518964 221568 9976 S 6.2 5.7 10:hostnamemysqld

      这是我们得到的2018_06_25_19_49_32-top的输出。例如,在“平均负载”部分,我们得到了两个“主机名”,而在RES和Time列中,我们得到了一个。在现实中,预期产出应该是:

      top - 20:05:17 up 10天,16:27,1个用户,平均负载:0.01,0.15,0.19任务:115 total, 1运行,114睡眠,0停止,0僵尸%Cpu(s): 1.0 us, 0.3 sy, 0.0 ni, 98.6 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem: 3881748 total, 147324 free, 1892824 used, 1841600 buff/缓存KiB Swap: 1572860 total, 1572748 free, 112 used。1609372 avail Mem PID USER PR NI VIRT RES SHR S %CPU % Mem TIME+ COMMAND 5304 vagrant 20 0 1983280 1.327g 12272 S 2.3 35.8 456:34.90 prometheus 5313 root 20 0 142100 16952 5428 S 1.0 0.4 179:16.81 node_export . node_export . node_export . node_export . node_export

      这是因为它将浮点数(在本例中)作为主机名。注意,在这种情况下,只有后跟另一个字符的浮点数才会被替换(参见下面的regex)。

      使用的正则表达式是:

      hostnameRE = regexp.MustCompile ((((a-zA-Z0-9) | [a-zA-Z0-9] [a-zA-Z0-9 \ -] * [a-zA-Z0-9]) \) + ([a-zA-Z0-9] | [a-zA-Z0-9] [a-zA-Z0-9 \ -] [a-zA-Z0-9]) {2,3} (?: \ W) ')

      它又被用于:

      func sanitizehostname (lines []string) {i:= range lines {lines[i] =主机名。ReplaceAllStringFunc(lines[i], replaceHostname)}}

      和替换函数:

      func replaceHostname(s string)字符串{如果字符串。HasSuffix(年代,”:“){返回“<主机名>:“返回“主机名”

      我还没有时间进一步检查正则表达式,但如果我没有弄错的话,以下将匹配0.01,例如:

      ([a-zA-Z0-9]) \) + ([a-zA-Z0-9]) {2,3} (?: \ W)

      这是上面提到的正则表达式的子集。我们可以使用下面的URL来测试这种情况是否存在:

      https://regex-golang.appspot.com/assets/html/index.html

      如果我们使用我发送的最后一个正则表达式,以及下面的字符串

      Top - 20:05:17 up 10天,16:27,1个用户,平均负载:0.01,0.15,0.19

      您将看到匹配是上面所见的“hostname”所代替的。

      如何繁殖:

      以如下命令运行工具:

      ——mysql-user=“根”——mysql-password = " mysql-host = localhost

      用任何你想要的密码进行加密。然后解密和解压缩输出,并检查生成的文件。在本例中,pt-stalk的' top '输出使用的是:2018_06_25_19_49_32-top。但这在许多其他文件中都可以看到,因此应该进行详尽的检查(grep -R 'hostname' *;检查所有生成的文件)。

      我将优先级设置为“高”,因为它将使许多输出没有意义,这将不能让我们正确地评估服务器性能,并可能意味着我们因此错过了捕捉数据的行动窗口。

      附件

        活动

            carlos.salguero卡洛斯Salguero
            agustin.gallego奥古斯汀•加利西亚语
            投票:
            1 为这个问题投票
            观察人士:
            2 开始关注这个问题

            日期

              创建:
              更新:
              解决:

              时间跟踪

                估计:
                原始估计-未指定
                未指定
                剩余:
                剩余估计- 0分钟
                0米
                记录:
                时间:1小时
                1 h

                聪明的清单