博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

ats 常用命令,从零开始 【】

Posted on 2017-07-20 16:52  bw_0927  阅读(1263)  评论(0)    收藏  举报

./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:1.0 236-81.D07071953.sina.com.cn:80 (squid/2.6.STABLE13)

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)