我尝试使用sed
命令,给它一个正则表达式,以过滤掉在给定时间戳内的日志。如果日志文件位于执行脚本的同一服务器上,我就能够做到这一点。这对我很有效-
sed -n '/2018-01-07 19/,/2018-01-07 22:1[4-9]/p' /var/opt/xyz/Logs/ErrorLog_2.txt`.
此命令过滤出与给定正则表达式匹配的日志。但是,当日志文件位于远程服务器中时,复杂性就会增加。我试着运行这个命令-
ssh dbsrd3511.uhc.com `sed -n '/2018-01-07 19/,/2018-01-07
22:1[4-9]/p' /var/opt/xyz/Logs/ErrorLog_2.txt
但它会抛出错误
ksh: 2018-01-07:not found
然而,当我像这样在sed
之前添加echo
时,它工作得很好-
ssh dbsrd3511.uhc.com echo `sed -n '/2018-01-07 19/,/2018-01-07 22:1[4-9]/p' /var/opt/xyz/Logs/ErrorLog_2.txt`
但是echo将所有东西连接在一起。输出如下所示-
40:09.146 Info: Deleted 13 MB at 1037 MB/sec /var/opt/MarkLogic/Forests/Meters/00002786 2018-01-07 21:40:09.148 Info: Deleted 9 MB at 3366 MB/sec /var/opt/MarkLogic/Forests/Meters/00002785 2018-01-07 21:52:00.893 Info: Saving /var/opt/MarkLogic/Forests/Meters/00002787 2018-01-07 21:52:02.039 Info: Saved 9 MB in 1 sec at 8 MB/sec to /var/opt/MarkLogic/Forests/Meters/00002787 2018-01-07 21:52:02.062 Info: Merging 73 MB from /var/opt/MarkLogic/Forests/Meters/00002783, /var/opt/MarkLogic/Forests/Meters/00002788, and /var/opt/MarkLogic/Forests/Meters/00002787 to /var/opt/MarkLogic/Forests/Meters/0000278a, timestamp=15153829212255230 2018-01-07 21:52:11.668 Info: Merged 71 MB in 10 sec at 7 MB/sec to /var/opt/MarkLogic/Forests/Meters/0000278a 2018-01-07 21:52:14.065 Info: Deleted 52 MB at 3235 MB/sec /var/opt/MarkLogic/Forests/Meters/00002783 2018-01-07 21:52:14.088 Info: Deleted 17 MB at 721 MB/sec /var/opt/MarkLogic/Forests/Meters/00002788 2018-01-07 21:52:14.105 Info: De
我看不清线路的变化。有什么方法可以让我得到正确的结果吗?
好的!到目前为止,我可以运行这个命令ssh dbsrd3511.uhc.com 'sed -n "/2018-01-07 21/,/2018-01-07 22:1[4-9]/p" /var/opt/MarkLogic/Logs/ErrorLog_3.txt'
,但问题是这些都是硬编码的值。实际上,日期和日志文件存储在变量中,所以我在执行这个命令- ssh dbsrd3511.uhc.com 'sed -n "$dateRange" $error_log_file_name'
时收到错误。它在连接到远程服务器时挂起。它不返回任何输出,只是在连接到远程服务器时挂起。
发布于 2018-01-10 02:14:06
Ohk!这对我来说终于起作用了。
ssh dbsrd3511.uhc.com "sed -n '$dateRange' $error_log_file_name
这对我也是有效的-
ssh dbsrd3511.uhc.com "sed -n '/2018-01-07 21/,/2018-01-07 22:1[4-9]/p' /var/opt/MarkLogic/Logs/ErrorLog_3.txt"
发布于 2018-01-10 02:42:09
为了避免引用和转义的噩梦,您可以简单地这样做:
ssh -t dbsrd3511.uhc.com cat /var/opt/xyz/Logs/ErrorLog_2.txt | sed -n '/2018-01-07 19/,/2018-01-07 22:1[4-9]/p'
它在本地系统上运行sed
进程,而不是远程运行。
缺点(可能可以忽略不计)是整个日志文件都是通过您的ssh
通道传输的,但如果它不是很大(即be或更大),这不应该是一个主要问题。
发布于 2018-01-21 22:07:49
在版本9中,有一个REST端点,它可以从集群中的任何服务器检索日志文件,通过日期范围和正则表达式的任意组合进行搜索。不需要'ssh‘进入远程服务器,访问集群中任何节点上的ML就足够了。
https://stackoverflow.com/questions/48173728
复制相似问题