./bin/traffic_line -s proxy.config.log.logging_enabled -v 3
************************启动************************
./traffic_cop& [root@45.78.53.131 bin]$ ps -ef | grep traff root 4997 20120 0 05:14 pts/1 00:00:00 ./traffic_cop nobody 4998 4997 0 05:14 pts/1 00:00:00 /home/services/ats/ats_6.1.1-rc0/bin/traffic_manager --bind_stdout /home/services/ats/ats_6.1.1-rc0/var/log/trafficserver/traffic.out --bind_stderr /home/services/ats/ats_6.1.1-rc0/var/log/trafficserver/traffic.out nobody 5004 4998 1 05:14 pts/1 00:00:02 /home/services/ats/ats_6.1.1-rc0/bin/traffic_server -M --bind_stdout /home/services/ats/ats_6.1.1-rc0/var/log/trafficserver/traffic.out --bind_stderr /home/services/ats/ats_6.1.1-rc0/var/log/trafficserver/traffic.out --httpport 8080:fd=8
configure没指定用户和组时,默认nobody
--bind_stdout --bind_stderr的路径默认也是congfigure时指定的路径
************************配置日志路径************************
该路径今后可通过
./traffic_line -s proxy.config.log.logfile_dir -v /new/path/ 来更改
前提是/new/path的路径存在,否则会服务器会启动失败,错误日志存在traffic.out文件中,如下:
traffic_server: Interrupt (Signal sent by the kernel 0 0)traffic_server: Interrupt (Signal sent by kill() 9479 0)unable to access log directory '/var/log/ats': 2, No such file or directory
please set 'proxy.config.log.logfile_dir'
[TrafficManager] ==> Cleaning up and reissuing signal #15
[TrafficManager] ==> signal #15
创建/var/log/ats目录,重启traffic_cop&, ps -ef 可见traffic.out的目录已更改
nobody 14057 14056 0 05:46 pts/4 00:00:00 /home/services/ats/ats_6.1.1-rc0/bin/traffic_manager --bind_stdout /var/log/ats/traffic.out --bind_stderr /var/log/ats/traffic.out
nobody 14066 14057 0 05:46 pts/4 00:00:00 /home/services/ats/ats_6.1.1-rc0/bin/traffic_server -M --bind_stdout /var/log/ats/traffic.out --bind_stderr /var/log/ats/traffic.out --httpport 8080:fd=8
接着可以通过./bin/traffic_line -s proxy.config.output.logfile -v /var/log/ats/traffic_server.out 来更改默认的traffic.out的文件,
也可以使用相对路径,./bin/traffic_line -s proxy.config.output.logfile -v traffic_server.out
注意:对应的目录必须已经手动创建,并且目录有相应的访问权限
mkdir /var/log/ats
chmod 777 /var/log/ats (因为traffic_manager, traffic_server默认是用nobody用户启动的)
否则会出现下面的错误
[root@45.78.53.131 ats_6.1.1-rc0]$ cat /var/log/ats/traffic_server.out
unable to access log directory '/var/log/ats': 13, Permission denied
please set 'proxy.config.log.logfile_dir' (即使上面已经设置过了proxy.config.log.logfile_dir)
此时可以看到文件已经修改成功
nobody 14780 14056 0 06:02 pts/4 00:00:00 /home/services/ats/ats_6.1.1-rc0/bin/traffic_manager --bind_stdout /var/log/ats/traffic_server.out --bind_stderr /var/log/ats/traffic_server.out
nobody 14836 14780 1 06:03 pts/4 00:00:03 /home/services/ats/ats_6.1.1-rc0/bin/traffic_server -M --bind_stdout /var/log/ats/traffic_server.out --bind_stderr /var/log/ats/traffic_server.out --httpport 8080:fd=8
CONFIG proxy.config.log.logfile_perm STRING rw-r--r--
此时原来默认路径 /home/services/ats/ats_6.1.1-rc0/var/log/trafficserver下的文件就不再被使用,相应的日志文件都被移到了/var/log/ats目录下
[root@45.78.53.131 ats_6.1.1-rc0]$ ll /var/log/ats/ total 128 -rw-r--r-- 1 nobody nobody 1057 Jul 20 06:03 diags.log -rw-r--r-- 1 nobody nobody 829 Jul 20 06:37 error.log -rw-r--r-- 1 nobody nobody 91916 Jul 20 06:36 manager.log -rw-r--r-- 1 nobody nobody 1680 Jul 20 06:37 squid.blog -rw-r--r-- 1 root root 3774 Jul 20 05:49 traffic.out -rw-r--r-- 1 root root 16095 Jul 20 06:03 traffic_server.out
************************配置map************************
[root@45.78.53.131 ats_6.1.1-rc0]$ netstat -lpn | grep traffic tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 14780/traffic_manag tcp 0 0 127.0.0.1:8083 0.0.0.0:* LISTEN 14780/traffic_manag tcp 0 0 127.0.0.1:8084 0.0.0.0:* LISTEN 14836/traffic_serve unix 2 [ ACC ] STREAM LISTENING 970201204 14780/traffic_manag /home/services/ats/ats_6.1.1-rc0/var/trafficserver/mgmtapi.sock unix 2 [ ACC ] STREAM LISTENING 970201206 14780/traffic_manag /home/services/ats/ats_6.1.1-rc0/var/trafficserver/eventapi.sock unix 2 [ ACC ] STREAM LISTENING 970201201 14780/traffic_manag /home/services/ats/ats_6.1.1-rc0/var/trafficserver/processerver.sock
对外提供服务的端口是8080, 可以通过CONFIG proxy.config.http.server_ports STRING 55336 来修改对外监听的端口
通过浏览器访问http://138.128.213.218:8080/,返回
Not Found on Accelerator
Description: Your request on the specified host was not found. Check the location and try again.
这时就能查看访问日志了,没有自定义格式时,由于ats使用默认的二进制编码记录日志,因此只能使用traffic_logcat来查看日志
[root@45.78.53.131 ats_6.1.1-rc0]$ ./bin/traffic_logcat /var/log/ats/squid.blog
1500545678.518 0 101.227.12.253 ERR_INVALID_URL/404 511 GET http://138.128.213.218/ - NONE/- text/html
1500545679.694 0 101.227.12.253 ERR_INVALID_URL/404 511 GET http://138.128.213.218/favicon.ico - NONE/- text/html
1500546057.198 0 139.162.111.98 ERR_INVALID_URL/404 506 GET http://138.128.213.218/ - NONE/- text/html
1500546369.734 0 101.227.12.253 ERR_INVALID_URL/404 511 GET http://test.ats.com/ - NONE/- text/html
1500546372.725 0 101.227.12.253 ERR_INVALID_URL/404 511 GET http://test.ats.com/favicon.ico - NONE/- text/html
1500547029.488 0 101.227.12.253 ERR_INVALID_URL/404 511 GET http://test.ats.com/ - NONE/- text/html
1500547031.029 0 101.227.12.253 ERR_INVALID_URL/404 511 GET http://test.ats.com/ - NONE/- text/html
1500547395.381 0 101.227.12.253 ERR_INVALID_URL/404 511 GET http://test.ats.com/ - NONE/- text/html
1500547399.099 0 101.227.12.253 ERR_INVALID_URL/404 511 GET http://test.ats.com/ - NONE/- text/html
同时/var/log/ats/error.log也会产生日志:
1 20170720.06h14m38s RESPONSE: sent 101.227.12.253 status 404 (Not Found on Accelerator) for 'http://138.128.213.218/' 2 20170720.06h14m39s RESPONSE: sent 101.227.12.253 status 404 (Not Found on Accelerator) for 'http://138.128.213.218/favicon.ico' 3 20170720.06h20m57s RESPONSE: sent 139.162.111.98 status 404 (Not Found on Accelerator) for 'http://138.128.213.218/' 4 20170720.06h26m09s RESPONSE: sent 101.227.12.253 status 404 (Not Found on Accelerator) for 'http://test.ats.com/' 5 20170720.06h26m12s RESPONSE: sent 101.227.12.253 status 404 (Not Found on Accelerator) for 'http://test.ats.com/favicon.ico' 6 20170720.06h37m09s RESPONSE: sent 101.227.12.253 status 404 (Not Found on Accelerator) for 'http://test.ats.com/' 7 20170720.06h37m11s RESPONSE: sent 101.227.12.253 status 404 (Not Found on Accelerator) for 'http://test.ats.com/' 8 20170720.06h43m15s RESPONSE: sent 101.227.12.253 status 404 (Not Found on Accelerator) for 'http://test.ats.com/'
http://www.cnblogs.com/my_life/articles/6994261.html
修改hosts文件,增加
138.128.213.218 test.ats.com
此时就可以通过浏览器域名的方式,访问到ats(http://test.ats.com:8080/),不过此时依然得到的是NOT FOUND的页面
配置remap.config文件
map http://test.ats.com/ http://192.168.56.3/reverse_map http://192.168.56.3/ http://test.ats.com/ #把源响应的ip转成域名再响应给代理用户执行./traffic_line -x , 使配置生效,此时可在 /var/log/ats/manager.log 看到:
[Jul 20 21:47:06.629] Manager {0x7f5dc9a6c700} NOTE: User has changed config file remap.config
再次通过浏览器访问http://138.128.213.218:8080/,依旧返回
Not Found on Accelerator
因为浏览器访问的是http://138.128.213.218:8080/,而remap.config中定义的规则是 map http://test.ats.com/ http://192.168.56.3/,端口不一致,所以依旧是not found
修改 map http://test.ats.com:8080/ http://www.baidu.com; ./traffic_Line -x
再通过浏览器访问http://138.128.213.218:8080/, 此时就可以看到久违的百度了。
另外一种测试方式:
map http://www.mail.163.com http://www.sina.com.cn
./traffic_line -x
wget -e http_proxy=ats机器的ip:port http://www.mail.163.com -S ,如果返回的是新浪页面的内容,则证明你的ats通了,ats基本的配置就完成了。
./bin/traffic_logcat /var/log/ats/squid.blog
1500601798.960 421 101.227.12.253 ERR_CLIENT_ABORT/200 46766 GET http://www.sina.com.cn/ - DIRECT/www.sina.com.cn text/html
1500601855.999 23209 101.227.12.253 TCP_HIT/200 598009 GET http://www.sina.com.cn/ - NONE/- text/html
************************配置squid ascii log************************
./bin/traffic_line -s proxy.config.log.custom_logs_enabled -v 1
Set proxy.config.log.custom_logs_enabled, please wait 10 seconds for traffic server to sync configuration, restart is not required
经测试发现
proxy.config.log.squid_log_enabled
proxy.config.log.squid_log_is_ascii
这两个配置无法通过./traffic_line -s 的方式来设置
$ ./bin/traffic_line -s proxy.config.log.squid_log_is_ascii -v 1
traffic_line [DEPRECATED]: Please correct your variable name and|or value
即使通过直接修改配置文件,然后./traffic_line -x的方式,也没效果,我的版本是6.1.1-rc0
135 CONFIG proxy.config.log.custom_logs_enabled INT 1
136 CONFIG proxy.config.log.squid_log_enabled INT 1
137 CONFIG proxy.config.log.squid_log_is_ascii INT 1
************************验证缓存,及状态************************
https://blog.zymlinux.net/index.php/archives/221
客户端
curl -v http://test.ats.com:8080/trafficserver.png > /dev/null
或者
wget -S http://test.ats.com:8080/trafficserver.png > /dev/null
无论访问多少次,./bin/traffic_logcat /var/log/ats/squid.blog的日志都显示没有缓存
1500620815.326 1 36.110.208.44 TCP_MISS/200 13770 GET http://127.0.0.1:8000/ats/trafficserver.png - DIRECT/127.0.0.1 image/png
1500620831.553 3 36.110.208.44 TCP_MISS/200 13770 GET http://127.0.0.1:8000/ats/trafficserver.png - DIRECT/127.0.0.1 image/png
1500620864.207 0 36.110.208.44 TCP_MISS/200 13770 GET http://127.0.0.1:8000/ats/trafficserver.png - DIRECT/127.0.0.1 image/png
1500621080.492 1 101.227.12.253 TCP_MISS/200 13770 GET http://127.0.0.1:8000/ats/trafficserver.png - DIRECT/127.0.0.1 image/png
1500621090.943 1 101.227.12.253 TCP_MISS/200 13770 GET http://127.0.0.1:8000/ats/trafficserver.png - DIRECT/127.0.0.1 image/png
可以看到该图片并没有写到缓存中。这个是很让新手捉急的,ats没有缓存是因为默认遵循了源服务器对缓存的控制,由于nginx那边没有定义缓存图片,ats默认遵循了这个所以就没有写缓存了。
配置ats在源服务器没有定义缓存的情况缓存文件
traffic_line -s proxy.config.http.cache.required_headers -v 0
traffic_line -x
1500621216.529 0 101.227.12.253 TCP_HIT/200 13770 GET http://127.0.0.1:8000/ats/trafficserver.png - NONE/- image/png
1500621237.087 0 101.227.12.253 TCP_MEM_HIT/200 13771 GET http://127.0.0.1:8000/ats/trafficserver.png - NONE/- image/png
1500621241.941 0 101.227.12.253 TCP_MEM_HIT/200 13771 GET http://127.0.0.1:8000/ats/trafficserver.png - NONE/- image/png
1500621840.138 0 36.110.208.44 TCP_MEM_HIT/200 13772 GET http://127.0.0.1:8000/ats/trafficserver.png - NONE/- image/png
1)"TCP_MEM_HIT:NONE" 边缘server内存命中(官网没有找到相关说明,自己臆断而来)
2)"TCP_HIT:NONE" 边缘server缓存命中
3)"TCP_MISS:SIBLING_HIT" 边缘server Miss,兄弟节点命中
4)"TCP_MISS:PARENT_HIT" 边缘server Miss,parent节点命中
5)"TCP_REFRESH_HIT:PARENT_HIT" 边缘server含有客户端请求的object,但是不新鲜,所以边缘server向parent发起一个“if-modified-since”请求,parent返回304not-modified的响应,最后边缘server将本地的object返回。
6)"TCP_REFRESH_MISS:PARENT_HIT" 边缘server含有客户端请求的object,但是不新鲜,所以边缘server向parent发起一个“if-modified-since”请求,parent返回一个新的object给边缘server,最后边缘server将新获取到的object返回。
7)"ERR_CLIENT_ABORT:SIBLING_HIT" 客户端还没有完成数据的获取就断掉了链接(icp回源)
8)"ERR_CLIENT_ABORT:PARENT_HIT" 客户端还没有完成数据的获取就断掉了链接(parent回源)
...
9)"TCP_IMS_HIT:NONE" The client issued an if-modified-since request and the object was in cache and fresher than the IMS date, or an if-modified-since request to the origin server revealed the cached object was fresh. Traffic Server served the cached object to the client.
10)"TCP_IMS_MISS:PARENT_HIT"
11)"TCP_REF_FAIL_HIT:" The object was in the cache but was stale. Traffic Server made an if-modified-since request to the origin server but the server did not respond. Traffic Server sent the cached object to the client.
...
"ERR_CONNECT_FAIL:DIRECT"
"ERR_CONNECT_FAIL" -> Traffic Server could not reach the origin server.
# 更多详细信息参考:https://docs.trafficserver.apache.org/en/6.2.x/admin-guide/monitoring/logging/log-formats.en.html#cache-result-codes
************************http 头部************************
Age:当代理服务器用自己缓存的实体去响应请求时,用该头部表明该实体从产生到现在经过多长时间了。
max-age:(只接受 Age 值小于 max-age 值,并且没有过期的对象)
Via: 列出从客户端到 OCS 或者相反方向的响应经过了哪些代理服务器,他们用什么协议(和版本)发送的请求。
当客户端请求到达第一个代理服务器时,该服务器会在自己发出的请求里面添加 Via 头部,并填上自己的相关信息,当下一个代理服务器 收到第一个代理服务器的请求时,会在自己发出的请求里面复制前一个代理服务器的请求的Via头部,并把自己的相关信息追加到后面,
以此类推,当 OCS 收到最后一个代理服务器的请求时,检查 Via 头部,就知道该请求所经过的路由。
via码非常有用,刚开始学ats的时候掌握好这个很有必要,方便分析缓存情况。官网提供的一个查询接口:http://trafficserver.apache.org/tools/via
注意via码的空格,正常是6个字符包括空格。
Via码需要启用的,执行:
traffic_line -s proxy.config.http.insert_request_via_str -v 1
traffic_line -s proxy.config.http.insert_response_via_str -v 2
traffic_line -x
此时就能看到Via头了
HTTP request sent, awaiting response...
HTTP/1.0 200 OK
Server: ATS/6.1.1
Date: Fri, 21 Jul 2017 08:23:20 GMT
Content-Type: image/png
Content-Length: 13524
Last-Modified: Fri, 21 Jul 2017 06:03:29 GMT
ETag: "59719931-34d4"
Accept-Ranges: bytes
Age: 0
Connection: keep-alive
Via: http/1.1 localhost.localdomain (ApacheTrafficServer/6.1.1 [cSsNfU])
Length: 13524 (13K) [image/png]
curl -X PURGE -v http://test.ats.com:8080/trafficserver.png
1500625908.777 2 36.110.208.44 ERR_PROXY_DENIED/403 526 PURGE http://127.0.0.1:8000/ats/trafficserver.png - DIRECT/- text/html
purge失败,从日志上我猜测是想删除nginx上源文件,导致的失败
************************配置文件的备份************************
每次修改配置文件后,ats会自动的备份
[root@45.78.53.131 ats_6.1.1-rc0]$ ll etc/trafficserver/records.config*
-rw-r--r-- 1 nobody nobody 13167 Jul 21 04:23 etc/trafficserver/records.config
-rw-r--r-- 1 nobody nobody 13167 Jul 21 03:12 etc/trafficserver/records.config_14
-rw-r--r-- 1 nobody nobody 13167 Jul 21 03:16 etc/trafficserver/records.config_15
-rw-r--r-- 1 nobody nobody 13167 Jul 21 03:16 etc/trafficserver/records.config_16
-rw-r--r-- 1 nobody nobody 12703 Jul 20 04:53 etc/trafficserver/records.config.default
************************自定义日志格式logs_xml.config************************
CONFIG proxy.config.log.custom_logs_enabled INT 1 可命令行方式
CONFIG proxy.config.log.xml_config_file STRING logs_xml.config ,6.1.1-rc1版本不支持命令行方式,直接修改文件;必须加,否则不会生成自定义的日志
CONFIG proxy.config.log.squid_log_enabled INT 0 最好关闭默认的squid日志
往logs_xml.config追加内容:
<LogFormat>
<Name = "access"/>
<Format = " \"%<chi>\" \"%<caun>\" \"%<ttms>\" \"%<cqts>\" \"%<cqhm>\" \"%<cquuc>\" \"%<cqhv>\" \"%<pssc>\" \"%<psql>\" \"%<hii>\" \"%<pqsi>\" \"%<crc>:%<phr>\" \"%<{Via}psh>\" \"%<{Referer}cqh>\" \"%<{User-Agent}cqh>\""/>
</LogFormat>
<LogObject>
<Format = "access"/>
<Filename = "access.log"/>
</LogObject>
因为原来的logs_xml.config中已经定义了squid的LogObject,
<LogObject>
<Format = "squid"/>
<Filename = "squid"/>
<Mode = "binary"/>
</LogObject>
所以会输出两份日志,所以一旦自定义了日志格式,最好把默认的squid日志关了:通过注释<Format = "squid"/>
测试过程中发现,有时access日志文件会莫名其妙的消失,应该是打包日志造成的,重新发起一个请求到ats会重新生成日志文件。
可能相关的配置如下:
CONFIG proxy.config.log.rolling_enabled INT 1
CONFIG proxy.config.log.rolling_interval_sec INT 300
CONFIG proxy.config.log.rolling_size_mb INT 10
CONFIG proxy.config.log.auto_delete_rolled_files INT 1
CONFIG proxy.config.log.periodic_tasks_interval INT 5
==================================================
1.启动|停止|重启ats:trafficserver {start|stop|restart}
2.清空cache: traffic_server -Cclear ( 该命令在ts停止时执行 )
3.查看cache是否清空: traffic_line -r proxy.process.cache.bytes_used
4.查看配置的cache大小: traffic_line -r proxy.process.cache.bytes_total
5.查看集群中的节点数: traffic_line -r proxy.process.cluster.nodes
6.echo “show:cache-stats” |traffic_shell
7.echo “show:proxy-stats” |traffic_shell,显示数据仅作参考,据说不是“很准”。
8.traffic_line -r proxy.node.cache_hit_ratio_avg_10s,查询当前缓存服务命中率
9.traffic_line -r proxy.node.current_server_connections ,到后端源的连接数
10.traffic_line -r proxy.node.current_client_connections ,前端用户到TServer的连接数
11.traffic_line -r proxy.node.user_agent_xacts_per_second ,平均每秒处理的并发数
12.traffic_line -r proxy.node.client_throughput_out ,当前TServer输出到前端的带宽流量(单位Mbps)
浙公网安备 33010602011771号