linux 三剑客分析nginx日志

日志分析与信息提取
该篇博客展示了如何利用shell命令对nginx日志进行分析,包括查找404和500错误的数量,统计访问量最高的IP以及进行日志内容的替换和格式化。此外,还涉及了curl命令获取网页内容,正则表达式提取特定信息以及简单的数据处理技巧。


nginx log日志分析  
 

找出log中的404 500的报错有多少条
root@ubuntu:/usr/local/nginx/logs# grep -E '\s500\s|\s404\s' nginx.log | wc -l
1

root@ubuntu:/usr/local/nginx/logs# grep -E -c ' 404 | 500 ' nginx.log 
1

root@ubuntu:/usr/local/nginx/logs# grep -E ' 404 | 500 ' nginx.log | wc -l
1

(grep -c 和wc -l使用效果是一样的,都是统计条数)
root@ubuntu:/usr/local/nginx/logs# grep -cE '\s500\s|\s404\s' nginx.log
1

root@ubuntu:/usr/local/nginx/logs# awk '$9~/404|500/' nginx.log |wc -l
1

root@ubuntu:/usr/local/nginx/logs# awk '$0~/404|500/' nginx.log |wc -l
1
注意$9~ 不加{print}默认就是print,如果 不加$9 默认为$0~,就是整行的意思,就默认整行中查找404和500,

 

找出访问量最高的前三名ip

root@ubuntu:/usr/local/nginx/logs# awk '{print $1}' nginx.log |sort 
192.168.141.1
192.168.141.1
2020/10/13

root@ubuntu:/usr/local/nginx/logs# awk '{print $1}' nginx.log |sort|uniq -c|sort -nr
      2 192.168.141.1
      1 2020/10/13
   
root@ubuntu:/usr/local/nginx/logs# awk '{print $1}' nginx.log |sort| uniq -c|sort -nr | head -3
      2 192.168.141.1
      1 2020/10/13
root@ubuntu:/usr/local/nginx/logs# awk '{print $1}' nginx.log |sort|uniq -c|sort -nr|head -3 |tail -3
      2 192.168.141.1
      1 2020/10/13

root@ubuntu:/usr/local/nginx/logs# awk '{print $1}' nginx.log |sort|uniq -c|sort -nr|head -3 | awk '{print $1}'
2
1

sort 排序,是一个经常使用的命令; 将重复的放在一起进行排序, sort默认排序是字典序,相对数字排序必须要加上-n加r -nr是反转;
uniq 去重  uniq -c 去重并统计重复次数

root@ubuntu:/usr/local/nginx/logs# grep -o '^[0-9]*.[0-9]*.[0-9]*.[0-9]*' nginx.log |sort|uniq -c|sort -nr|head -3
      2 192.168.141.1
      1 2020/10/13 19

 $grep  -E    -o '^[0-9{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}'  nginx.log  | sort | uniq  -c | sort -nr  | head -3

 sed 's后的/可以用@替换,或者其他#、*都可以,为了区别于其他的/


 

 将topics后面的数字替换成number
 grep 'topics' nginx.log | sed 's@/topics/[0-9]*@/topics/numbers@g'
 grep 'topics' nginx.log | sed -E 's/topics\/[0-9]*@/topics/number/g' \/表示/ ,进行转义
 $sed  s#topics/[0-9]*#topics/number#g nginx.log | head -10

 

 将ip地址横向打印
 
root@ubuntu:/usr/local/nginx/logs# awk '{print $1}' nginx.log |sed ':f;N;s/\n/|/g;tf'
2020/10/13|192.168.141.1|192.168.141.1

sed的标记和跳转用法; 标记在前面 f(前面可以加f、1等任意字符):,;tf后面跳转也是
  
$awk '{print $1}'   nginx.log | sed ':1;N;s/\n/|/g;t1'
sed的工作模式是按行提取内容,忽略换行
N代表,把下面一行追加到此行,包含换行符
:1 和t1代表打一个标记为1,t1跳转到标记处,相当于一直进行N;s/\n/|/g 这个操作,其中1可以写成其他值

 三剑客练习:

root@ubuntu:/usr/local/appach# curl -s http://www.baidu.com/s?wd=mq3 | grep -o "结果约[0-9,]*" | grep -o "[0-9,]*"
4,020,000


root@ubuntu:/home/lulu/Desktop# cat TestReport202009291810.html | grep -o '<td style="font-weight:bold" align="center"><font color="red">[0-9]*</font></td>'|grep -o [0-9]*
1

root@ubuntu:/home/lulu/Desktop# cat TestReport202009291810.html | grep -o '<td style="font-weight:bold" align="center"><font color="red">[0-9]*</font></td><td align="center">[0-9]*' |grep -c "100" 
0


root@ubuntu:/home/lulu/Desktop/Test# while read x;do echo $x ; curl -s http://www.baidu.com/s?wd=$x ;done <txt | grep -o "结果约[0-9,]*" 
结果约100,000,000
结果约100,000,000
结果约98,700,000
结果约100,000,000


root@ubuntu:/home/lulu/Desktop/Test# curl -s http://www.baidu.com/s?wd=mq3 | grep  "结果约" |awk -F '约|个' ' {print $2}'
4,020,000


root@ubuntu:/home/lulu/Desktop/Test# a=`curl -s https://testerhome.com/topics|grep -o 'href="/topics/[0-9]*"'`;echo $a
href="/topics/25575" href="/topics/25520" href="/topics/25579" href="/topics/25571" href="/topics/25589" href="/topics/25578" href="/topics/25585" href="/topics/25580" href="/topics/25554" href="/topics/25588" href="/topics/25586" href="/topics/25584" href="/topics/25334" href="/topics/24967" href="/topics/25035" href="/topics/25166" href="/topics/25581" href="/topics/25582" href="/topics/24873" href="/topics/25561" href="/topics/25279" href="/topics/25555" href="/topics/25399" href="/topics/25574" href="/topics/25580" href="/topics/25566" href="/topics/25505" href="/topics/25491" href="/topics/25473"


root@ubuntu:/home/lulu/Desktop/Test# a=`curl -s https://testerhome.com/topics|grep -o 'href="/topics/[0-9]*"' | awk -F '/|"' '{print $4}' `;echo $a
25575 25520 25579 25571 25589 25578 25585 25580 25554 25588 25586 25584 25334 24967 25035 25166 25581 25582 24873 25561 25279 25555 25399 25574 25580 25566 25505 25491 25473


root@ubuntu:/home/lulu/Desktop/Test# 
a=`curl -s https://testerhome.com/topics|grep -o 'href="/topics/[0-9]*"' | awk -F '/|"' '{print $4}' `;for id in $a ;do url='https://testerhome.com/topics/'$id;zan=`curl -s $url | grep -o  -ml '<span>[0-9]*'|awk -F '>' '{print $2}'`;if [ -n "$zan" ];then echo $url '点赞人数' $zan ;else echo $url '点赞人数' 0;fi ;done | awk -F '/' '{print $NF}'

sed解析替换

grep -i '<stringProp name="ThreadGroup.num_threads">[0-9]*' order_auto.jmx  | sed  -i  "s/\([0-9]\+\)/2/g"

 

<think>我们正在讨论B/S架构测试环境中常用的Web服务器和代理中间件。根据之前的引用和讨论,我们可以总结如下: 1. **Web服务器**: - **Apache HTTP Server**:引用[4]中提到,Apache是常用的Web服务器,配置文件位于`/etc/httpd/conf/httpd.conf`,默认端口80。它支持模块化扩展,适合各种动态内容处理(如PHP)。 - **Nginx**:引用[2][3]中提到,Nginx不仅可作为Web服务器,还可作为反向代理和负载均衡器。它以高性能、高并发处理能力著称,尤其适合静态资源服务和代理场景。 2. **代理中间件**: - **Nginx**:除了作为Web服务器,Nginx常被用作反向代理,将请求转发给后端的应用服务器(如Tomcat、Node.js等),引用[3]中明确指出Nginx可用于负载均衡。 - **HAProxy**:引用[2]中提到HAProxy是一种软件负载均衡器,适用于TCP/HTTP层的高性能代理,支持多种负载均衡算法(如轮询、最小连接数等)。 - **LVS (Linux Virtual Server)**:引用[2]中提到LVS是四层负载均衡解决方案,工作在传输层,性能极高,适合大规模集群。 此外,引用[3]还提到负载均衡设备的选择策略,包括软件负载均衡(如Nginx、HAProxy、LVS)和云服务负载均衡器(如AWS ALB)。 ### 常用Web服务器及代理中间件对比表 | 类型 | 名称 | 适用场景 | 特点 | |--------------|-----------|--------------------------------------------------------------------------|----------------------------------------------------------------------| | **Web服务器**| Apache | 动态内容处理(如PHP)、模块化扩展需求 | 配置灵活,模块丰富,但高并发性能不如Nginx | | | Nginx | 静态资源服务、高并发场景、反向代理 | 事件驱动架构,资源占用低,支持高并发连接 | | **代理中间件**| Nginx | HTTP/HTTPS反向代理、负载均衡、缓存加速 | 配置简洁,支持动静分离,可扩展性强 | | | HAProxy | TCP/HTTP应用层代理、负载均衡(支持健康检查、会话保持) | 专注代理和负载均衡,性能优异,支持ACL规则 | | | LVS | 四层(传输层)负载均衡、大规模集群 | 内核级转发,性能接近硬件设备,但配置复杂 | > 注:在测试环境中,Nginx因集成Web服务和代理功能于一体而被广泛采用;HAProxy则更适合纯代理场景[^2][^3]。 ### 部署建议 1. **测试环境简化方案**: - 使用Nginx同时承担Web服务器和反向代理角色: ```nginx # 静态资源服务配置 server { listen 80; server_name static.test; root /var/www/static; } # 动态请求反向代理 server { listen 80; server_name app.test; location / { proxy_pass http://localhost:3000; # 转发至Node.js应用 } } ``` 2. **负载均衡测试**: - 使用HAProxy实现后端多实例负载: ```haproxy frontend http-in bind *:80 default_backend servers backend servers balance roundrobin server s1 192.168.1.10:80 check server s2 192.168.1.11:80 check ``` ### 选择依据 - **功能需求**:若需处理静态文件或简单反向代理,选Nginx;若需高级负载策略(如基于Cookie的会话保持),选HAProxy。 - **性能需求**:单机高并发选Nginx或LVS;复杂路由策略选HAProxy。 - **易用性**:Nginx配置更直观,HAProxy对TCP支持更完善。 > 注意:所有组件均可通过包管理器安装(如`apt install nginx`或`yum install haproxy`)[^4]。 §§相关问题§§ 1. 如何配置Nginx实现WebSocket代理? 2. HAProxy与Nginx在负载均衡场景下的性能差异有哪些? 3. 如何在测试环境中模拟多节点负载均衡? </think>### 适用于B/S架构测试环境的常用Web服务器及代理中间件 #### 一、核心Web服务器 1. **Apache HTTP Server** - **特点**:兼容性强、模块化设计,支持多种动态语言(PHP/Python等) - **适用场景**:传统LAMP架构、内容管理系统(如WordPress)测试 - **配置文件路径**:`/etc/httpd/conf/httpd.conf`(主配置),`/etc/httpd/conf.d/`(子配置)[^4] - **安装命令**: ```bash # Ubuntu/Debian sudo apt install apache2 # CentOS/RHEL sudo yum install httpd ``` 2. **Nginx** - **特点**:高性能异步架构、低内存占用,擅长静态资源服务和反向代理 - **适用场景**:高并发测试、前后端分离架构、API网关模拟 - **关键优势**: - 单机可支撑上万并发连接 - 内置负载均衡和缓存功能 - 配置文件简洁(`/etc/nginx/nginx.conf`) - **安装命令**: ```bash sudo apt install nginx # Ubuntu sudo yum install nginx # CentOS ``` #### 、代理中间件 1. **Nginx(反向代理)** ```nginx # 示例:代理后端Node.js应用 server { listen 80; server_name test.example.com; location / { proxy_pass http://localhost:3000; # 转发到应用服务器 proxy_set_header Host $host; } location /static { alias /var/www/static; # 直接处理静态资源 } } ``` 2. **HAProxy** - **特点**:专业级TCP/HTTP负载均衡,支持会话保持和健康检查 - **测试场景**:模拟多节点服务分发、故障转移测试 - **配置示例**: ```haproxy frontend http_front bind *:80 default_backend app_servers backend app_servers balance roundrobin server s1 192.168.1.10:8080 check server s2 192.168.1.11:8080 check ``` 3. **Traefik**(现代云原生代理) - **特点**:自动服务发现、支持Let's Encrypt证书 - **适用场景**:容器化测试环境(Docker/Kubernetes) - **安装**: ```bash docker run -d -p 8080:8080 -p 80:80 \ -v /var/run/docker.sock:/var/run/docker.sock \ traefik:v2.10 ``` #### 三、选型对比表 | 组件 | 类型 | 并发性能 | 配置复杂度 | 典型测试场景 | |---------------|------------|----------|------------|---------------------------| | **Apache** | Web服务器 | 中等 | 中等 | PHP应用、传统Web项目测试 | | **Nginx** | Web/代理 | 极高 | 低 | 高并发API、静态资源服务测试 | | **HAProxy** | 代理 | 极高 | 中等 | 负载均衡策略验证 | | **Traefik** | 动态代理 | 高 | 低 | 容器化环境服务网关测试 | #### 四、测试环境搭建建议 1. **基础组合**: ```mermaid graph LR A[测试客户端] --> B(Nginx:80) B --> C{路由决策} C -->|静态请求| D[Nginx静态资源] C -->|动态请求| E[Apache/PHP后端] C -->|API请求| F[Node.js微服务] ``` 2. **性能测试组合**: ```mermaid graph LR A[负载生成器] --> B(HAProxy) B --> C[App服务器1] B --> D[App服务器2] B --> E[App服务器3] ``` > **关键提示**:测试环境中建议优先选用Nginx,因其同时满足Web服务和代理需求,且资源占用低[^2][^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员路同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值