我有一个日志文件,其中数据继续附加取决于服务器停止和启动。现在我想找出服务器的停机时间,即无法使用的时间。
这里的主要问题是有多条停止和启动线,因此需要找出停止服务器线,然后找到服务器启动的下一行,然后是时间差异。
有人可以帮助我吗?
我会在这里粘贴部分日志。
模式是:Stopping Container
和Started Module cloud.services.CloudInstance
[2016-03-02 14:25:09,864 (INFO )][Thread-1] Wed Mar 02 14:25:09 UTC 2016 Stopping Container <main>...
[2016-03-02 14:25:09,864 (INFO )][Thread-1] Wed Mar 02 14:25:09 UTC 2016 Stopping WebServer...
[2016-03-02 14:25:09,872 (ERROR)][Thread-1] [Thread-1] INFO org.eclipse.jetty.servlet.listener.ELContextCleaner - javax.el.BeanELResolver purged
[2016-03-02 14:25:09,872 (ERROR)][Thread-1] [Thread-1] INFO org.eclipse.jetty.server.handler.ContextHandler - stopped o.e.j.w.WebAppContext{//}
[2016-03-02 14:25:10,009 (ERROR)][Thread-1] [Thread-1] WARN org.eclipse.jetty.util.thread.QueuedThreadPool - 103 threads could not be stopped
-----
[2016-03-02 10:34:04,628 (ERROR)][main] [main] INFO org.eclipse.jetty.server.AbstractConnector - Started SelectChannelConnector@0.0.0.0:9192
[2016-03-02 10:34:04,628 (INFO )][main]
Started Module cloud.services.CloudInstance@6232a3cd
先谢谢,
答案 0 :(得分:0)
grep将根据模式匹配
获取数据grep 'Stopping Container' server.log >stoptimings.txt
grep 'Started Module cloud.services.CloudInstance' server.log >starttimings.txt
您可以使用下面的awk(不是单行)
cat stoptimings.txt | awk '
BEGIN{
FS="["
}
{
curTime=substr($2,12,8)
m=split(curTime,t,":")
n=split(prevTime,w,":")
firstTime= (t[1]*3600) + (t[2]*60) + t[3]
secondTime= (w[1]*3600) + (w[2]*60) + w[3]
diffTime=(firstTime - secondTime)
prevTime=curTime
printf("%s|%s|%s|%s\n",curTime,firstTime,secondTime,diffTime)
}'
差异时间将以秒为单位打印。您可以使用以下代码来获得分钟差异
diffTime=(firstTime - secondTime) / 60