linux resin 查看日志命令,【转】linux:访问日志分析

作为一个程序员或项目负责人,甚至运营人员,很多人都想知道:

* 我们的项目访问量怎么样

* 用户访问高峰在什么时候

* 系统变慢的时候用户做了哪些操作

* 用户对哪些功能比较感兴趣

* 真实用户在服务器上的操作轨迹是什么样的

* 系统的瓶颈在哪

* 哪些地方应该优化

* 对什么地方优化可以收益最大化

* 系统是否存在异常访问

却苦于无从获得这些信息。

其实,只要合理记录并仔细分析服务器的访问日志,上面问题都可以找到答案。

===== 日志格式定义 =====

为了更好的复用分析工具,另外我们也需要记录一些标准日志中没有的信息,因此需要定义用于分析的日志格式。

如果在项目中使用了多种web服务器,只需要根据具体情况定义一种即可。

从性能方便考虑,在apache或nginx上记录日志较好;

从分析的方便程度来说,tomcat或resin更方便一些(因为一般来说,只有动态请求会到达应用服务器,而这些请求也是我们最感兴趣的)。请大家根据自身项目的情况来选择.

==== 基本格式 ====

我们分析的access log格式如下:

执行时间 用户标识(非必需,可以从cookie或session中获得) 远程主机 请求时间 请求url(是否带参数均可)

http响应状态 返回字节数

:!:

各种服务器记录执行时间的单位有所不同,tomcat和nginx为毫秒,resin和apache为微秒,这个需要特别注意。

==== apache日志配置 ====

LogFormat "%D %{xxx}C %h %t \"%r\" %>s %b \"%{Referer}i\""

simple

CustomLog logs/access_log simple

%D为服务器处理该请求的时间,单位为微秒。

%{xxx}C,从cookie中取名为xxx的cookie值

==== nginx日志配置 ====

log_format simple '$request_time $cookie_xxx $remote_addr

[$time_local]'

'"$request" $status $body_bytes_sent '

'"$http_referer"';

$request_time为服务器处理该请求的时间,单位为毫秒。

$cookie_xxx,从cookie中取名为xxx的cookie值

==== tomcat日志配置 ====

prefix="localhost_access_log." suffix=".txt" pattern='%D %{xxx}s %h

%t "%r" %s %b %{Referer}i' resolveHosts="false"/>

%D为服务器处理该请求的时间,单位为毫秒。

%{xxx}s 从session中取得变量xxx的值

%{xxx}c 从cookie 中取得变量xxx的值

==== resin日志配置 ====

format='%D %{xxx}c %h %t "%r" %s %b

"%{Referer}i"' rollover-period="1D"/>

%D为服务器处理该请求的时间,单位为微秒。

%{xxx}c,从cookie中取名为xxx的cookie值

resin日志默认的写法在某些特定情况下会存在严重性能问题,导致所有线程被锁,服务器失去响应。因此请用上面配置完全替换原有配置。resin日志格式的详细说明,请参考http://caucho.com/resin-4.0/admin/logging.xtp#Access

logging 。

==== 获得多次转发的客户端IP ====

在生产环境中,一般到应用服务器的时候,已经经过了多次转发,如array-->apache(nginx)-->tomcat(resin),这个时候,如果我们想要在access

log中获得用户客户端的原始IP,就需要做一些特殊配置。

nginx在进行转发时,一般会设置

proxy_set_header X-Real-IP $remote_addr;

此时,nginx后面的服务器在配置access log时,需要将%h改为%{X-Real-IP}i

array,apache,squid在转发时,一般都会将客户端真实ip放到header中X-Forwarded-For,那么,他们后面的服务器在配置access

log时,需要将%h改为%{X-Forwarded-For}i

nginx作为backend server时,跟上面情形有所不同,需要做一些特殊配置:

首先,编译时需要添加一个参数 --with-http_realip_module

然后,需要做如下设置:

设置信任ip列表,也就是负载均衡设备的ip,可以是一个或多个。然后设置保存客户端真实IP的header变量名,一般是X-Real-IP或X-Forwarded-For,如下

set_real_ip_from 192.168.1.0/24;

set_real_ip_from 192.168.2.1;

real_ip_header X-Real-IP;

===== 概要分析脚本 timeout.awk =====

#对于请求超时的记录进行标记,并打印出来

#!/bin/sh

BEGIN{

#基础单位,tomcat/apache为1设为1,resin/nginx/设为1000.

base=1

#超时阀值,建议设为300-500,单位为毫秒

valve=500

}

#剔除静态文件请求

$7 ~ /\.[jd][hsw][ptr][m]?[l]?[\b\?]?|^\/dwr/ {

#总体统计

costTime=$1/base

sumTime+=costTime

totalCount++

if(min>costTime) min=costTime

if(max

#分布区间

if(costTime>=0 && costTime<1000)

{area01+=1}

if(costTime>=1000 && costTime<2000)

{area12+=1}

if(costTime>=2000 && costTime<3000)

{area23+=1}

if(costTime>=3000 && costTime<4000)

{area34+=1}

if(costTime>=4000 && costTime<5000)

{area45+=1}

if(costTime>=5000) {area50+=1}

#超时统计

pos=index($7,"?")

if(pos>0) {url=substr($7,0,pos-1)}

else { url=$7 }

urlCount[url]++

urlsumTime[url]+=costTime

if(costTime>valve)

{ urlTimeout[url]++ }

}

END{

printf("\n当前正在分析文件%s,共处理%s个请求,响应时间最小为-ms,最大为�ms,平均Mms\n",FILENAME,totalCount,min,max,sumTime/totalCount)

printf("\n所有请求的分布区间如下:\n")

printf("小于1秒的请求�个,占%.2f%\n",area01,area01/totalCount*100)

printf("1--2秒的请求�个,占%.2f%\n",area12,area12/totalCount*100)

printf("2--3秒的请求�个,占%.2f%\n",area23,area23/totalCount*100)

printf("3--4秒的请求�个,占%.2f%\n",area34,area34/totalCount*100)

printf("4--5秒的请求�个,占%.2f%\n",area45,area45/totalCount*100)

printf("大于5秒的请求�个,占%.2f%\n",area50,area50/totalCount*100)

printf("\n下面是请求超时严重的url列表,需要重点优化,当前超时设定为]ms\n",valve)

for(url in urlTimeout) {

#超时小于等于3次,或者超时比例20%以下的不输出

if(urlTimeout[url]>3 &&

(urlTimeout[url]/urlCount[url]>0.2)) {

printf("%-80s共处理]次,超时]次,占%3.2f%,平均耗时mms\n",url,urlCount[url],urlTimeout[url],urlTimeout[url]/urlCount[url]*100,urlsumTime[url]/urlCount[url])

}

}

}

===== 概要分析脚本 timeout.awk =====

用于生成一个日志分析概览,可以对当前系统的性能有个大概了解,分析结果样式如下:

执行命令

awk -f timeout.awk valve=200 base=1 datafile

其中,valve为超时的阀值,默认500ms,base根据服务器类型,tomcat/apache为1,resin/nginx为1000;

这个脚本仅分析jsp/jhtml/dwr请求,不统计对静态资源的请求。

===== 分析命令 =====

下面在分析核心爆破英语项目时,一些我常用的分析命令,等有时间了再整理为一个工具,也欢迎大家贡献自己的想法。

下面命令仅适用于tomcat和nginx日志,如果是apache或resin日志,请将$1>10替换为$1>10000,这个条件主要用于过滤静态请求。

cost time 10 大 url

awk '$1>10 {print $0}' localhost_access_log.2010-05-21.txt |awk

'{print $7}'|awk -F? '{print $1}'|sort|uniq -c|sort -rbg|sed

10q

访问量10大时间点(分钟)

awk '$1>10 {print $0}' localhost_access_log.2010-05-21.txt |awk

'{print $4}'|awk -F: '{print $2":"$3}'|sort|uniq -c|sort -rbg|sed

10q

10大ip (访问量最大)

awk '$1>10 {print $0}' localhost_access_log.2010-05-21.txt|awk

'{print $3}'|sort|uniq -c|sort -rbg|sed 10q

url时间点分布 (指定URL 访问量 按分钟)

awk '$7~"startLinker.jhtml" {print $0}'

localhost_access_log.2010-05-21.txt |awk '{print $4}'|awk -F:

'{print $2":"$3}'|uniq -c

指定ip时间点分布 (指定IP 访问量 按分钟)

awk '$1>10 {print $0}' localhost_access_log.2010-05-21.txt |grep

'192.168.30.21\b' |awk '{print $4}'|awk -F: '{print $2":"$3}'|uniq

-c

指定时间点url分布 (具体某一分钟)

awk '$1>10 {print $0}' localhost_access_log.2010-05-21.txt|grep

'12:45'|awk '{print $7}'|awk -F? '{print $1}'|sort|uniq -c|sort

-bg

根据用户名查找登录过的ip

awk '{print $2" "$3}' localhost_access_log.2010-05-21.txt |grep

's01o050'|awk '{print $2}'|sort|uniq

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/505694.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux系统初级管理书,Linux系统管理基础--超级适合Linux新手的书

liuyongqing 于 2012-11-15 11:53:18发表:谢谢分享liuyongqing 于 2012-11-15 11:53:11发表:谢谢分享liuyongqing 于 2012-11-15 11:52:52发表:谢谢分享liuyongqing 于 2012-11-15 11:52:46发表:谢谢分享liuyongqing 于 2012-11-15 11:52:43发表:谢谢分享wankuixing 于 2012-11…

是vans_Vans 的旧海报上原来有这么多学问…

事情是这样的&#xff0c;某天&#xff0c;当我们编辑部翻开一张 Vans 70 年代的海报&#xff0c;发现开头上面写着&#xff1a;GO “JAMIN” IN VANS。这段话引起了在场的所有人的好奇。(图片来源&#xff1a;Vans)到底什么是 “JAMIN” 呢&#xff1f; 在我们刨根究底的搜寻下…

linux单机到单机adg环境,Oracle 11.2.0.4 DataGuard 环境打PSU,OJVM PSU补丁快速参考

环境&#xff1a;RHEL6.5 Oracle 11.2.0.4 DataGuard physical standby主库和备库都是单节点。需求&#xff1a;主备库同时应用160719的PSU和OJVM PSU补丁。先参考MOS文档 ID 278641.1 的解决方案如下&#xff1a;SOLUTIONProcess Overview:In the primary disable log shippi…

python增量更新数据_Python标准库——加密

增量更新散列计算器的update()方法可以反复调用。每次调用时&#xff0c;都会根据提供的附加文本更新摘要。增量更新比将整个文件读入内存更高效&#xff0c;而且能生成相同的效果。新建hashlib_update.py文件。import hashlibfrom hashlib_data import loremh hashlib.md5()h…

linux 帮助文档管理,Linux系统帮助文件使用——man命令

如何获取命令帮助&#xff1a;(1)如果是内键命令&#xff1a;help COMMAND 例如&#xff1a;help history外部命令&#xff1a; COMMAND –help 例如&#xff1a;ifconfig –help(2)也可以查看manual手册&#xff0c;手册存放在/usr/share/man&#xff0c;全是.gz压缩…

activiti前端画图转化_记Activiti入门使用-2 流程绘制、导入及开始一个流程

一、流程绘制与导入百度啥的找了好多bpmn绘制工具&#xff0c;都不尽如人意&#xff0c;大多数都不能编辑网关出口的跳转条件&#xff0c;最后还是选择了activiti官方的那个绘图的app。。。啥都好&#xff0c;就是线不能弯&#xff0c;很难受。(后来开发的时候惊讶地发现了方法…

int是不是python保留字_下面不属于Python保留字的是:

【填空题】作解剖定位时&#xff0c;家畜前、后肢的后面分别称为( )和( )。【单选题】世界上第一条高速铁路是【单选题】ZZ* ?【单选题】下面不属于Python保留字的是&#xff1a;【单选题】The accounting concept which requires assets to be valued at their net book val…

计算机系统结构实验报告Linux,计算机操作系统体系结构实验报告.doc

操作系统实验报告实验目的&#xff1a;随着操作系统应用领域的扩大&#xff0c;以及操作系统硬件平台的多样化&#xff0c;操作系统的体系结构和开发方式都在不断更新&#xff0c;目前通用机上常见操作系统的体系结构有如下几种:模块组合结构、层次结构、虚拟机结构和微内核结构…

python列表的表示形式_python 列表推导式

1、列表推导式书写形式&#xff1a;[表达式 for 变量 in 列表] 或者 [表示式 for 变量 in 列表 if 条件]1 #!/usr/bin/python2 #-*- coding: utf-8 -*-34 li [1,2,3,4,5,6,7,8,9]5 print [x**2 for x inli]67 print [x**2 for x in li if x>5]89 print dict([(x,…

linux sh 编程,Linux shell 编程入门

shell 编程概念(1) shell是一种命令行解释器&#xff0c;外壳有很多种类(2) shell 看成是Linux内核和用户沟通的桥梁&#xff0c;用户默认不能直接操作内核(3)可以通过shell外壳去操作&#xff0c;用户指令传递给shell&#xff0c;传递给Linux内核&#xff0c;内核接受去处理(4…

云科技网络验证源码_面向虚拟化架构和容器云的开源安全工具

随着云和虚拟技术发展&#xff0c;docker容器的使用越来越流行和方便。有很多企业已经把基础架构由传统实体机转移到了虚拟机化架构&#xff0c;基于公有云、私有云以及容器云构建在线服务。与容器相关的安全性对变得越来越重要。与传统的安全性方法相比&#xff0c;虚拟化架构…

linux ubuntu 安装yum,ubuntu使用yum安装软件问题

其实ubuntu是不应该用yum来管理软件安装的&#xff0c;只是后来才发现的&#xff0c;这里记录一下尝试的过程。一开始是想把windows桌面上的文件拖到xshell登录的ubuntu的目录中&#xff0c;但是没成功&#xff0c;参考https://blog.csdn.net/liuao107329/article/details/4999…

kali linux 桌面消失_kalilinux系统设置不见了的解决方案

kalilinux的系统设置不见了是由于删除软件或者错误配置导致的&#xff0c;解决方法是重新安装桌面环境。下面我给出几个不同桌面环境。KDE桌面1.KDE Plasma Desktop (最小化的等离子桌面)安装&#xff1a;apt-get install kali-defaults kali-root-login desktop-base kde-plas…

linux异步实现原理,Android异步处理四:AsyncTask的实现原理

分析&#xff1a;在分析实现流程之前&#xff0c;我们先了解一下AsyncTask有哪些成员变量。privatestaticfinalintCORE_POOL_SIZE 5;//5个核心工作线程privatestaticfinalintMAXIMUM_POOL_SIZE 128;//最多128个工作线程privatestaticfinalintKEEP_ALIVE 1;//空闲线程的超时时间…

ue4集合类型_UE4项目问题集合

debugeditor模式下&#xff0c;在LoadPackage过程中crash&#xff0c;vs报出Stack overflow的错误这是由于Package层数过多&#xff0c;vs栈不够用导致的。而ue4用UBT导致不能直接修改项目的栈大小。之前项目后期就因为这个崩溃导致大家没法再用debug模式进行开发。直接的解决办…

mysql5.7 for linux7,大道浮屠诀---mysql5.7.28 for linux安装

环境&#xff1a;redhat6.5安装RMP包的具体操作如下&#xff1a;1、如有mariadb,先卸载rpm -qa |grep mariadbrpm -qa |grep mysql*rpm -e --nodeps xxxxxx (卸载查询到的rpm包)2、安装新的mysql5.7.28&#xff0c;解压安装包tar -xvf mysql-5.7.28-1.el6.x86_64.rpm-bundle.t…

python中提供怎样的内置库、可以用来创建用户界面_使用外部GUI库在Autodesk中创建用户界面可能会...

我不确定这是否有关联&#xff0c;但一些谷歌搜索发现PyQt在玛雅内部非常流行。您可以尝试使用here或here(用源代码解释了here)通过Maya创建一个新的线程循环并在其中执行。似乎Maya包含了一个模块&#xff0c;用于设置新的线程对象&#xff0c;其中包含一个QApplication&#…

做raid会损坏linux文件吗,如何从损坏的RAID系统挂载磁盘?

我有一个可怕的情况&#xff0c;我必须在救援的Debian Linux中从损坏的RAID系统中恢复数据。我只想以只读方式将它们全部挂载到/ mnt / rescue&#xff0c;以便能够将VMWare GSX映像复制到另一台计算机上&#xff0c;并稍后将它们迁移到ESXi。相关命令的输出如下。fdisk -lDisk…

flutter字体不跟随系统_Flutter自定义字体无法加载

SOLVED &#xff1a;我仍然不确定问题是什么&#xff0c;但我通过简单地创建一个新的Flutter项目&#xff0c;在新项目中设置字体&#xff0c;然后将我的.dart文件粘贴到新项目中来修复它 . 即使一切都完全相同(据我所知)&#xff0c;它运作良好 . 去搞清楚 .我试图在我的应用程…

c语言求乘法,急!!!!c语言:求n次多项式的加法和乘法

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼if(s->data.coef!0.0){s->data.expnp->data.expn;r->nexts;rs;}pp->next;qq->next;break;case 1:s->data.coefq->data.coef;s->data.expnq->data.expn;r->nexts;rs;qq->next;break;}//switch}…