首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用ssh访问远程服务器中的sed日志?

如何使用ssh访问远程服务器中的sed日志?
EN

Stack Overflow用户
提问于 2018-01-10 01:32:35
回答 3查看 61关注 0票数 0

我尝试使用sed命令,给它一个正则表达式,以过滤掉在给定时间戳内的日志。如果日志文件位于执行脚本的同一服务器上,我就能够做到这一点。这对我很有效-

代码语言:javascript
运行
复制
sed -n '/2018-01-07 19/,/2018-01-07 22:1[4-9]/p' /var/opt/xyz/Logs/ErrorLog_2.txt`. 

此命令过滤出与给定正则表达式匹配的日志。但是,当日志文件位于远程服务器中时,复杂性就会增加。我试着运行这个命令-

代码语言:javascript
运行
复制
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  

但它会抛出错误

代码语言:javascript
运行
复制
 ksh: 2018-01-07:not found

然而,当我像这样在sed之前添加echo时,它工作得很好-

代码语言:javascript
运行
复制
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将所有东西连接在一起。输出如下所示-

代码语言:javascript
运行
复制
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'时收到错误。它在连接到远程服务器时挂起。它不返回任何输出,只是在连接到远程服务器时挂起。

EN

回答 3

Stack Overflow用户

发布于 2018-01-10 02:14:06

Ohk!这对我来说终于起作用了。

代码语言:javascript
运行
复制
ssh dbsrd3511.uhc.com "sed -n '$dateRange' $error_log_file_name

这对我也是有效的-

代码语言:javascript
运行
复制
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"
票数 0
EN

Stack Overflow用户

发布于 2018-01-10 02:42:09

为了避免引用和转义的噩梦,您可以简单地这样做:

代码语言:javascript
运行
复制
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或更大),这不应该是一个主要问题。

票数 0
EN

Stack Overflow用户

发布于 2018-01-21 22:07:49

在版本9中,有一个REST端点,它可以从集群中的任何服务器检索日志文件,通过日期范围和正则表达式的任意组合进行搜索。不需要'ssh‘进入远程服务器,访问集群中任何节点上的ML就足够了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48173728

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档