zoukankan      html  css  js  c++  java
  • GoAccess操作手册

    名字

    GoAccess - 可视化 Web 日志分析工具。

    语法

    					goaccess [filename] [ options ... ] [-c][-M][-H][-q][-d][...]
    				
    

    描述

    				GoAccess 是一款开源(MIT许可证)的且具有交互视图界面的实时 Web 日志分析工具,通过你的 Web 浏览器或者 *nix 系统下的终端程序即可访问。 				
    
    				能为系统管理员提供快速且有价值的 HTTP 统计,并以在线可视化服务器的方式呈现。 					GoAccess 解析指定的 Web 日志文件并将统计结果输出到 X 终端。功能如下: 				
    
    •   					**通用统计:** 						此面板展示了几个主要指标,比如:有效和无效请求的数量,分析这些数据所花费的时间,独立访客的情况,请求的文件,静态文件(CSS, ICO, JPG 等)的完整URL,404错误,被解析的日志文件的大小以及消耗的带宽。 					
      
    •   					**独立访客:** 						此面板按照日期展示了访问次数,独立访客数,以及累计消耗的带宽等指标。具有相同IP,相同访问时间,相同的 UserAgent 的 HTTP 请求将会被识别为独立访客。默认情况下包含了网络爬虫。 						
        					您也可以选择使用 --date-spec=hr 参数将按照日期分析修改为按照小时,例如:05/Jun/2016:16 。这对于希望在小时级别去跟踪每日流量非常有帮助。 					
      
    •   					**请求的文件:** 						此面板展示您服务器上被请求次数最多的文件。包含访问次数,独立访客数,百分比,累计消耗带宽,使用的协议,请求方式。 					
      
    •   					**请求的静态文件:** 						列出请求频率最高的静态文件类型,例如: `JPG`, `CSS`, `SWF`, `JS`, `GIF`, 和 `PNG` , 以及和上一个面板一样的其他指标。 另外静态文件可以被添加到配置文件中。 					
      
    •   					**404 或者文件未找到:** 						展示内容与之前的面板类似,但是其数据包含了所有未找到的页面,以及俗称的 404 状态码。 					
      
    •   					**主机:** 						此面板展示主机自身的详细信息。能够很好的发现不怀好意的爬虫以及识别出是谁吃掉了你的带宽。 						
        					扩展面板将向您展示更多信息,比如主机的反向DNS解析结果,主机所在国家和城市。如果开启了 参数,选择想查看的 IP 地址并按回车,将会显示 UserAgent 列表。 					
      
    •   					**操作系统:** 						此面板将显示主机使用的操作系统的信息。GoAccess 将尽可能尝试为每一款操作系统提供详细的信息。 					
      
    •   					**浏览器:** 						此面板将显示来访主机使用的浏览器信息。GoAccess 将尽可能尝试为每一款浏览器提供详细的信息。 					
      
    •   					**访问次数:** 						此面板按小时报告。因此将显示24个数据点,每一个均对应每一天的某一个小时。 						
        					使用 --hour-spec=min 参数可以设定为按每十分钟报告,并将以 16:4 的格式显示时间。这对发现服务器的峰值访问时段很有帮助。 					
      
    •   					**虚拟主机:** 						此面板将显示从访问日志中解析出来的不同的虚拟主机的情况。此面板仅在日志格式中启用了 %v 参数时显示。 					
      
    •   					**来路URL:** 						如果问题主机通过其他的资源访问了你的站点,以及通过从其他主机上的链接或者跳转到你的站点,则这些来路URL将会被显示在此面板。可以在配置文件中通过 ``--ignore-panel`` 开启此功能。**(默认关闭)** 					
      
    •   					**来路站点:** 						此面板将仅显示主机的部分,而不是完整的URL。 					
      
    •   					**关键字:** 						报告支持用在谷歌搜索,谷歌缓存,谷歌翻译上使用关键字。目前仅支持通过 HTTP 使用谷歌搜索。 可以在配置文件中通过 ``--ignore-panel`` 开启此功能。**(默认关闭)** 					
      
    •   					**地理位置:** 						根据 IP 地址判断地理位置。统计数据按照大洲和国家分组。需要地理位置模块的支持。 					
      
    •   					**HTTP 状态码:** 						以数字表示的 HTTP 请求的状态编码。 					
      
    •   					**远程用户(HTTP验证)** 						通过 HTTP 验证来确定访问文档的权限。如果文档没有被密码保护起来,这部分将会显示为 “-”。此面板默认为开启,除非在日志格式变量中设置了参数 `%e` 。 					
      
        			注意: 					如果配置了可选项,所有面板将显示处理请求的平均时间消耗。 				
      

    存储

    				GoAccess 支持三种类型的存储方式。请根据你的需要和系统环境进行选择。 				
    

    默认哈希表

      				内存哈希表可以提供较好的性能,缺点是数据集的大小受限于物理内存的大小。GoAccess 默认使用内存哈希表。如果你的内存可以装下你的数据集,那么这种模式的表现非常棒。此模式具有非常好的内存利用率和性能表现。 				
    

    Tokyo Cabinet 磁盘 B+ 树

      				使用这种模式来处理巨大的数据集,大到不可能在内存中完成任务。当数据提交到磁盘以后,B+树数据库比任何一种哈希数据库都要慢。但是,使用 SSD 可以极大的提高性能。往后您可能需要快速载入保存的数据,那么这种方式就可以被使用。 				
    

    Tokyo Cabinet 内存哈希表

      				作为默认哈希表的替换方案。因为使用通用类型在内存表现以及速度方面都很平均。 				
    


    配置

    				GoAccess 拥有多个配置选项。获取完整的最新配置选项列表,请运行:*./configure --help* 				
    
    • --enable-debug

      使用调试标志编译且关闭编译器优化。

    • --enable-utf8

      宽字符支持。依赖 Ncursesw 模块。

    • --enable-geoip=<legacy|mmdb>

      地理位置支持。依赖 MaxMind GeoIP 模块。 legacy 将使用原始 GeoIP 数据库。 mmdb 将使用增强版 GeoIP2 数据库。

    • --enable-tcb=<memhash|btree>

      Tokyo Cabinet 存储支持。 memhash 将使用 Tokyo Cabinet 的内存哈希数据库。btree 将使用 Tokyo Cabinet 的磁盘 B+Tree 数据库。

    • --disable-zlib

      禁止在 B+Tree 数据库上使用 zlib 压缩。

    • --disable-bzip

      禁止在 B+Tree 数据库上使用 bzip2 压缩。

    • --with-getline

      使用动态扩展行缓冲区用来解析完整的行请求,否则将使用固定大小(4096)的缓冲区。

    • --with-openssl

      使 GoAccess 与其 WebSocket 服务器之间的通信能够支持 OpenSSL。

    选项

    				下面的选项可以通过命令行使用,如果是长选项则通过配置文件。 				
    

    日志/日期/时间 格式

    • --time-format

      						参数 time-format 后跟随一个空格符,指定日志的时间格式,包含普通字符与特殊格式说明符的任意组合。他们都由百分号 (%)开始。参考 `man strftime`。 %T 或者 %H:%M:%S. 						
      
    • --date-format

      						参数 date-format 后跟随一个空格符,指定日志的日期格式,包含普通字符与特殊格式说明符的任意组合。他们都由百分号 (%)开始。参考 `man strftime`。 						
      
    • --log-format

      						参数 log-format 后跟随一个空格符或者制表分隔符(`	`),用于指定日志字符串格式。 						
      
      						另外可以指定原始 日志/日期/时间 格式,简单来说,下表中的预定义日志格式名称可以用作 日志/日期/时间 格式的变量。GoAccess 可以处理在一个变量中处理一个预定义名称,而在另一变量中处理另外一个预定义名称。 						
      
      COMBINED     | 联合日志格式
      VCOMBINED    | 支持虚拟主机的联合日志格式
      COMMON       | 通用日志格式
      VCOMMON      | 支持虚拟主机的通用日志格式
      W3C          | W3C 扩展日志格式
      SQUID        | Native Squid 日志格式
      CLOUDFRONT   | 亚马逊 CloudFront Web 分布式系统
      CLOUDSTORAGE | 谷歌云存储
      AWSELB       | 亚马逊弹性负载均衡
      AWSS3        | 亚马逊简单存储服务 (S3)
      
      						注意: 一般来说,需要在包含空格、逗号、管道符、引号、/、括号的值的周围引用引号。内部引号必须进行转义处理。 						
      
      						注意: 使用管道传送数据给 GoAccess 时不会提示 日志/日期/时间 配置对话框,你需要在配置文件或者命令行中提前定义。 						
      

    用户交互选项

    • -c --config-dialog

      						在程序开始运行时显示 日志/日期 配置窗口。 						
      
    • -i --hl-header

      颜色高亮活动面板。

    • -m --with-mouse

      						在主仪表盘面板使能鼠标支持。 						
      
    • --color=<fg:bg[attrs, PANEL>

      使用终端输出时指定自定义颜色。

      颜色语法:

      DEFINITION space/tab colorFG#:colorBG# [attributes,PANEL]
      
      							FG# = 前景色 [-1...255] (-1 = 默认配色)
      							BG# = 背景色 [-1...255] (-1 = 默认配色)
      						
      
      						使用如下方式应用颜色属性也是允许的(多个属性使用逗号分隔),例如: 							`bold,underline,normal,reverse,blink` 						
      
      						如果喜欢,可以为同一个指标在不同面板设置不同颜色,比如一个指标在页面请求面板使用颜色A,同时在浏览器面板则显示颜色B。 						
      
      • COLOR_MTRC_HITS
      • COLOR_MTRC_VISITORS
      • COLOR_MTRC_DATA
      • COLOR_MTRC_BW
      • COLOR_MTRC_AVGTS
      • COLOR_MTRC_CUMTS
      • COLOR_MTRC_MAXTS
      • COLOR_MTRC_PROT
      • COLOR_MTRC_MTHD
      • COLOR_MTRC_HITS_PERC
      • COLOR_MTRC_HITS_PERC_MAX
      • COLOR_MTRC_VISITORS_PERC
      • COLOR_MTRC_VISITORS_PERC_MAX
      • COLOR_PANEL_COLS
      • COLOR_BARS
      • COLOR_ERROR
      • COLOR_SELECTED
      • COLOR_PANEL_ACTIVE
      • COLOR_PANEL_HEADER
      • COLOR_PANEL_DESC
      • COLOR_OVERALL_LBLS
      • COLOR_OVERALL_VALS
      • COLOR_OVERALL_PATH
      • COLOR_ACTIVE_LABEL
      • COLOR_BG
      • COLOR_DEFAULT
      • COLOR_PROGRESS
    • 请查阅配置文件中颜色方案示例。

    • --color-scheme <1|2|3>

      						选择终端配色方案。`1` 为单色方案。`2` 为绿色方案以及 `3` 为 Monokai 方案(需终端支持 256 色)。 						
      
    • --crawlers-only

      						仅解析和显示爬虫(机器人)。 						
      
    • --html-custom-css=<path.css>

      						在 HTML 报告中按照指定的自定义 CSS 文件路径加载 CSS 样式。 						
      
    • --html-custom-js=<path.js>

      						在 HTML 报告中按照指定的自定义 JS 文件路径加载 JS 代码。 						
      
    • --html-report-title=</p> <pre><code> 设定 HTML 报告页面的标题和头部内容。 </code></pre> </li> <li> <p>--html-prefs=<JSON></p> <pre><code> 设定 HTML 报告的默认参数。通过提交一个有效的包含相关参数的 JSON 对象来设置。允许用户为每一个面板单独设置。参考如下示例。 </code></pre> <pre><code> --html-prefs='{"theme":"bright","perPage":5,"layout":"horizontal","showTables":true,"visitors":{"plot":{"chartType":"bar"}}}' </code></pre> <p>注意:</p> <pre><code> 提交的 JSON 对象必须保存在一行 JSON 字符串中。 </code></pre> </li> <li> <p>--json-pretty-print</p> <pre><code> 使用制表符和新行格式化 JSON 输出。 </code></pre> </li> <li> <p>--max-items=<num></p> <pre><code> 设置每个面板最多可以显示的单元个数。取值范围是 1 到 n。 注意: 仅 CSV 和 JSON 格式的报告允许大于默认值 366 个单元每面板(或者 50 个在实时 HTML 报告中)。 </code></pre> </li> <li> <p>--no-color</p> <pre><code> 关闭颜色输出。此选项在不支持色彩的终端上为默认选项。 </code></pre> </li> <li> <p>--no-column-names</p> <pre><code> 在终端输出中不显示列名。默认在每一个面板的每一个有效指标都会显示列名。 </code></pre> </li> <li> <p>--no-csv-summary</p> <pre><code> 在 CSV 格式输出中禁止汇总指标。 </code></pre> </li> <li> <p>--no-progress</p> <pre><code> 解析日志时不显示进度指标[总请求数/每秒请求数]。 </code></pre> </li> <li> <p>--no-tab-scroll</p> <pre><code> 禁止通过 TAB 键滚动面板或者使用数字键选择面板。 </code></pre> </li> <li> <p>--no-html-last-updated</p> <pre><code> 在生成的 HTML 报告中不显示“最近更新”。 </code></pre> </li> </ul> <h4 id="服务器选项">服务器选项</h4> <ul> <li> <p>--addr=<address></p> <pre><code> 将服务器绑定到指定 IP 地址。默认绑定到 0.0.0.0 。 通常无需指定,除非您希望将服务器绑定到主机上的其他地址。 </code></pre> </li> <li> <p>--daemonize</p> <pre><code> 使 GoAccess 作为守护程序运行(仅在 --real-time-html 开启下有效)。 </code></pre> </li> <li> <p>--origin=<url></p> <pre><code> E在 WebSocket 握手中确保客户端发送指定的源头。且指定的源应与浏览器发送源头字段完全相同。例如:`--origin=http://goaccess.io` </code></pre> </li> <li> <p>--port=<port></p> <pre><code> 指定服务使用的端口。GoAccess 默认使用端口 7890 作为 WebSocket 服务器。请确保此端口可用。 </code></pre> </li> <li> <p>--real-time-html</p> <pre><code> 使能实时 HTML 报告。 </code></pre> </li> <li> <p>--ws-url=<[scheme://]url[:port]></p> <pre><code> 此 URL 用于 WebSocket 服务器的回应。用于客户端侧的 WebSocket 构建器。 同时可以选择指定 WebSocket 的 URI 协议,比如:`ws://` 用于非加密连接, 以及 `wss://` 用于加密连接。示例:`wss://goaccess.io` 如果 GoAccess 运行在代理服务器的后面,您需要通过在主机名后跟随冒号加端口号的方式让客户端连接到另外一个不同的端口。示例:`goaccess.io:9999` 默认情况下,会尝试去连接生成报告的主机名。如果 GoAccess 运行在一台远程服务器上,则远程主机名也应该在 URL 中指定。当然,必须保证主机是有效的。 </code></pre> </li> <li> <p>--fifo-in=<path/file></p> <pre><code> 创建一个管道(先入先出)从指定的路径/文件读取数据。 </code></pre> </li> <li> <p>--fifo-out=<path/file></p> <pre><code> 创建一个管道(先入先出)往指定的路径/文件写入数据。 </code></pre> </li> <li> <p>--ssl-cert=<path/cert.crt></p> <pre><code> 指定 TLS/SSL 证书的路径。使 GoAccess 支持 TLS/SSL,需要使用参数 `--ssl-cert` 和 `--ssl-key`。 仅在使用了参数 --with-openssl 时有效 </code></pre> </li> <li> <p>--ssl-key=<path/priv.key></p> <pre><code> 指定 TLS/SSL 私钥的路径。使 GoAccess 支持 TLS/SSL,需要使用参数 `--ssl-cert` 和 `--ssl-key`。 仅在使用了参数 --with-openssl 时有效 </code></pre> </li> </ul> <h4 id="file-options">FILE OPTIONS</h4> <ul> <li> <p>-f --log-file=<logfile></p> <pre><code> 指定输入日志文件的路径。如果在配置文件中指定了输入文件,则其优先级要高于在命令行中通过 `-f` 参数指定。 </code></pre> </li> <li> <p>-l --log-debug=<filename></p> <pre><code> 发送所有调试信息到指定文件。需要指定配置选项 `--enable-debug` </code></pre> </li> <li> <p>-p --config-file=<configfile></p> <pre><code> 指定使用自定义配置文件。如果设置了此参数,其优先级将高于全局配置文件(如果有)。 </code></pre> </li> <li> <p>--invalid-requests=<filename></p> <pre><code> 记录无效请求到指定文件。 </code></pre> </li> <li> <p>--no-global-config</p> <pre><code> 禁止加载全局配置文件。可能的目录应该是 `/usr/etc/`, `/etc/` 或者 `/usr/local/etc/`, 除非在运行 ./configure 时指定了 `--sysconfdir=/dir` 。 </code></pre> </li> </ul> <h4 id="解析选项">解析选项</h4> <ul> <li> <p>-a --agent-list</p> <pre><code> 开启 UserAgent 列表。开启后会降低解析速度。 </code></pre> </li> <li> <p>-d --with-output-resolver</p> <pre><code> 输出 `HTML` 或者 `JSON` 报告时开启 IP 解析。 </code></pre> </li> <li> <p>-e --exclude-ip <IP|IP-range></p> <pre><code> 排除一个 IPv4 或者 IPv6 地址。 使用连接符表示 IP 段(开始-结束)。 </code></pre> <ul> <li><code>exclude-ip 127.0.0.1</code></li> <li><code>exclude-ip 192.168.0.1-192.168.0.100</code></li> <li><code>exclude-ip ::1</code></li> <li><code>exclude-ip 0:0:0:0:0:ffff:808:804-0:0:0:0:0:ffff:808:808</code></li> </ul> </li> <li> <p>-H --http-protocol=<yes|no></p> <pre><code> HTTP 请求协议开关。将创建一个请求字段包含请求协议+真实请求。 </code></pre> </li> <li> <p>-M --http-method=<yes|no></p> <pre><code> HTTP 请求方法开关。将创建一个请求字段包含请求方法+真实请求。 </code></pre> </li> <li> <p>-o --output=<json|csv></p> <pre><code> 将给定文件重定向到标准输出,通过后缀名决定输出格式: </code></pre> <ul> <li> <pre><code> /path/file.csv - Comma-separated values (CSV) </code></pre> </li> <li> <pre><code> /path/file.json - JSON (JavaScript Object Notation) </code></pre> </li> <li> <pre><code> /path/file.html - HTML </code></pre> </li> </ul> </li> <li> <p>-q --no-query-string</p> <pre><code> 忽略请求的查询字符串。即: www.google.com/page.htm?query => www.google.com/page.htm 注意: 去掉查询字符串将极大降低内存消耗,特别对带时间戳的请求。 </code></pre> </li> <li> <p>-r --no-term-resolver</p> <pre><code> 在终端输出时禁止 IP 解析。 </code></pre> </li> <li> <p>--444-as-404</p> <pre><code> 将非标准状态 444 作为 404 处理。 </code></pre> </li> <li> <p>--4xx-to-unique-count</p> <pre><code> 将 4xx 客户端错误数加到独立访客数中。 </code></pre> </li> <li> <p>--all-static-files</p> <pre><code> 统计包含查询字符串的静态文件。 </code></pre> </li> <li> <p>--date-spec=<date|hr></p> <pre><code> 设置日期的显示格式,一种是标准日期格式(默认),一种是日期后附加小时的格式。 仅在访客面板有效。对于在小时级别分析访客数据很有帮助。显示格式示例:`18/Dec/2010:**19**` </code></pre> </li> <li> <p>--double-decode</p> <pre><code> 解码双重编码的值。包括 UserAgent,Request 以及 Referer。 </code></pre> </li> <li> <p>--enable-panel=<PANEL></p> <p>开启指定面板。面板列表:</p> <ul> <li>VISITORS</li> <li>REQUESTS</li> <li>REQUESTS_STATIC</li> <li>NOT_FOUND</li> <li>HOSTS</li> <li>OS</li> <li>BROWSERS</li> <li>VISIT_TIMES</li> <li>VIRTUAL_HOSTS</li> <li>REFERRERS</li> <li>REFERRING_SITES</li> <li>KEYPHRASES</li> <li>STATUS_CODES</li> <li>REMOTE_USER</li> <li>GEO_LOCATION</li> </ul> </li> <li> <p>--hour-spec=<hour|min></p> <pre><code> 设定时间的显示格式,一种是标准时间格式(默认),一种是时间后附加分钟数(每十分钟)的格式。 用于时间分布面板。对于在特定时间段分析流量峰值很有用处。 </code></pre> </li> <li> <p>--ignore-crawlers</p> <p>忽略爬虫。</p> </li> <li> <p>--ignore-panel=<PANEL></p> <p>忽略指定面板。面板列表:</p> <ul> <li>VISITORS</li> <li>REQUESTS</li> <li>REQUESTS_STATIC</li> <li>NOT_FOUND</li> <li>HOSTS</li> <li>OS</li> <li>BROWSERS</li> <li>VISIT_TIMES</li> <li>VIRTUAL_HOSTS</li> <li>REFERRERS</li> <li>REFERRING_SITES</li> <li>KEYPHRASES</li> <li>STATUS_CODES</li> <li>REMOTE_USER</li> <li>GEO_LOCATION</li> </ul> </li> <li> <p>--ignore-referer=<referer></p> <p>忽略被统计的来路。支持通配符。例如: <code>*.domain.com</code> <code>ww?.domain.*</code></p> </li> <li> <p>--ignore-status=<STATUS></p> <p>忽略解析或者显示一个或者多个状态码。如果有多个状态码,使用此参数每次指定一个。</p> </li> <li> <p>--num-tests=<number></p> <pre><code> 设定测试行数,即使用给定的 日志/日期/时间 格式测试访问日志。默认值为 10 行。如果设置为 0 ,解析器不会做任何测试而是直接解析整个文件。如果在达到 `number` 之前,有一行匹配上了给定的 日志/日期/时间 格式,则解析器会认为日志文件是有效的,否则 GoAccess 会返回 `EXIT_FAILURE` 并显示相关的错误信息。 </code></pre> </li> <li> <p>--process-and-exit</p> <pre><code> 解析日志,且退出时不输出数据。主要用于仅希望往磁盘数据库中添加数据而无需输出报告时使用。 </code></pre> </li> <li> <p>--real-os</p> <pre><code> 显示真实的操作系统名称。例如: Windows XP, Snow Leopard. </code></pre> </li> <li> <p>--sort-panel=<PANEL,FIELD,ORDER></p> <pre><code> S在初始化载入是对面板进行排序。排序选项使用逗号分隔。选项使用这样的格式:PANEL,METRIC,ORDER **可用指标** </code></pre> <ul> <li>BY_HITS <code>按访问量</code></li> <li>BY_VISITORS <code>按独立访客数</code></li> <li>BY_DATA <code>按数据</code></li> <li>BY_BW <code>按带宽</code></li> <li>BY_AVGTS <code>按平均处理时间</code></li> <li>BY_CUMTS <code>按累积处理时间</code></li> <li>BY_MAXTS <code>按最大处理时间</code></li> <li>BY_PROT <code>按 HTTP 协议</code></li> <li>BY_MTHD <code>按 HTTP 方法</code></li> </ul> <p>可用排序</p> <ul> <li>ASC</li> <li>DESC</li> </ul> </li> <li> <p>--static-file <extension></p> <pre><code> 添加静态文件后缀名。例如:`.mp3`。 后缀名区分大小写。 </code></pre> </li> </ul> <h4 id="地理位置选项">地理位置选项</h4> <ul> <li> <p>-g --std-geoip</p> <p>标准 GeoIP 数据库,低内存占用。</p> </li> <li> <p>--geoip-database <geocityfile></p> <pre><code> 设定 GeoIP 数据库路径。例如:GeoLiteCity.dat。需要从 maxmind.com 上下载到本地。IPv4 和 IPv6 均可用支持。注意:`--geoip-city-data` 是 `--geoip-database` 的别名。 注意: 如果使用 GeoIP2,您需要从 [MaxMind](http://dev.maxmind.com/geoip/geoip2/geolite2/) 下载 城市/国家 数据库,并通过 `--geoip-database` 设定。 </code></pre> </li> </ul> <h4 id="其他选项">其他选项</h4> <ul> <li> <p>-h --help</p> <p>查看帮助信息。</p> </li> <li> <p>-V --version</p> <pre><code> 显示版本信息并退出。 </code></pre> </li> <li> <p>-s --storage</p> <pre><code> 显示当前存储方法。比如:B+ Tree, Hash。 </code></pre> </li> <li> <p>--dcf</p> <pre><code> 显示默认配置文件的路径,如果没有使用 `-p` 指定。 </code></pre> </li> </ul> <h4 id="磁盘存储选项">磁盘存储选项</h4> <ul> <li> <p>--keep-db-files</p> <pre><code> 在磁盘上保存已解析的数据。如果数据库文件存在,则文件将被覆盖。此参数应用于第一个数据集。如果设置此参数为 false 则在退出程序时将删除所有数据库。示例见下文。 仅在设置了 --enable-tcb=btree 时有效。 </code></pre> </li> <li> <p>--load-from-disk</p> <pre><code> 从磁盘载入之前存储过的数据。如果仅读取已保存的数据,则需要退出数据库文件。参考 `keep-db-files` 即相关示例见下文。 仅在设置了 --enable-tcb=btree 时有效。 </code></pre> </li> <li> <p>--db-path <dir></p> <pre><code> 设置磁盘数据库文件的存储路径。默认值为 `/tmp` 目录。 仅在设置了 --enable-tcb=btree 时有效。 </code></pre> </li> <li> <p>--xmmap <num></p> <pre><code> 设置附加内存映射的大小,单位为字节。默认值为0。 仅在设置了 --enable-tcb=btree 时有效。 </code></pre> </li> <li> <p>--cache-lcnum <num></p> <pre><code> 指定被缓存的最大叶子节点数目。如果取值小于 0,则使用默认值。默认值为 1024。设定较大的值以获得较快的处理速度,同时会增加内存消耗。较小的值则会降低内存消耗。 仅在设置了 --enable-tcb=btree 时有效。 </code></pre> </li> <li> <p>--cache-ncnum <num></p> <pre><code> 指定被缓存的最大非叶子节点数目。如果取值小于 0,则使用默认值。默认值为 512。 仅在设置了 --enable-tcb=btree 时有效。 </code></pre> </li> <li> <p>--tune-lmemb <num></p> <pre><code> 指定每一个叶子页面的成员数量。如果取值小于 0,则使用默认值。默认值为 128。 仅在设置了 --enable-tcb=btree 时有效。 </code></pre> </li> <li> <p>--tune-nmemb <num></p> <pre><code> 指定每一个非叶子页面的成员数量。如果取值小于 0,则使用默认值。默认值为 256。 仅在设置了 --enable-tcb=btree 时有效。 </code></pre> </li> <li> <p>--tune-bnum <num></p> <pre><code> 指定每个 Bucket 组的元素数量。如果取值小于 0,则使用默认值。默认值为 32749。建议 Bucket 组大小的取值为已保存页面数的 1 到 4 倍。 仅在设置了 --enable-tcb=btree 时有效。 </code></pre> </li> <li> <p>--compression <zlib|bz2></p> <pre><code> 指定页面采用的压缩编码(ZLIB|BZ2)。 仅在设置了 --enable-tcb=btree 时有效。 </code></pre> </li> </ul> <h3 id="自定义-日志日期-格式">自定义 日志/日期 格式</h3> <p>GoAccess 可以解析虚拟的任意 Web 日志格式。</p> <pre><code> 预定义的选项包括:通用日志格式,联合日志格式,包含虚拟主机,W3C 格式以及亚马逊 CloudFront(分布式下载)。 </code></pre> <p>GoAccess 允许任意的自定义格式字符串。</p> <pre><code> 有两种方法配置日志格式。最简单的方式是运行 GoAccess 时使用 `-c` 显示一个配置窗口。但是这种方式不是永久有效的,因此你需要在配置文件中设定格式。 配置文件位于:`%sysconfdir%/goaccess.conf` 或者 `~/.goaccessrc` 注意: `%sysconfdir%` 可能是 `/etc/`, `/usr/etc/` 或者 `/usr/local/etc/` **time-format** 参数 time-format 后跟随一个空格符,指定日志的时间格式,包含普通字符与特殊格式说明符的任意组合。他们都由百分号 (%)开始。参考 `man strftime`。 `%T` 或者 `%H:%M:%S`. 注意: 如果给定的时间戳以微秒计算,则必须在 *time-format* 中使用参数 `%f` 。 **date-format** 参数 date-format 后跟随一个空格符,指定日志的日期格式,包含普通字符与特殊格式说明符的任意组合。他们都由百分号 (%)开始。参考 `man strftime`。 注意: 如果给定的时间戳以微秒计算,则必须在 *time-format* 中使用参数 `%f` 。 **log-format** 参数 log-format 后跟随一个空格符或者制表分隔符(` `),用于指定日志字符串格式。 </code></pre> <h4 id="特殊格式说明符">特殊格式说明符</h4> <ul> <li> <pre><code> `%x` 匹配 time-format 和 date-format 变量的日期和时间字段。用于使用时间戳来代替日期和时间两个独立变量的场景。 </code></pre> </li> <li> <pre><code> `%t` 匹配 time-format 变量的时间字段。 </code></pre> </li> <li> <pre><code> `%d` 匹配 date-format 变量的日期字段。 </code></pre> </li> <li> <pre><code> `%v` 根据 canonical 名称设定的服务器名称(服务区或者虚拟主机)。 </code></pre> </li> <li> <pre><code> `%e` 请求文档时由 HTTP 验证决定的用户 ID。 </code></pre> </li> <li> <pre><code> `%h` 主机(客户端IP地址,IPv4 或者 IPv6)。 </code></pre> </li> <li> <pre><code>%r </code></pre> <p>客户端请求的行数。这些请求使用分隔符(单引号,双引号)引用的部分可以被解析。否则,需要使用由特殊格式说明符(例如:</p> <pre><code>%m </code></pre> <p>,</p> <pre><code>%U </code></pre> <p>,</p> <pre><code>%q </code></pre> <p>和</p> <pre><code>%H </code></pre> <p>)组合格式去解析独立的字段。</p> <ul> <li>注意: <strong>既可以</strong>使用 <code>%r</code> 获取完整的请求,<strong>也可以</strong>使用 <code>%m</code>, <code>%U</code>, <code>%q</code> and <code>%H</code> 去组合你的请求,但是不能同时使用。</li> </ul> </li> <li> <pre><code> `%m` 请求的方法。 </code></pre> </li> <li> <pre><code>%U </code></pre> <p>请求的 URL。</p> <ul> <li>注意: 如果查询字符串在 <code>%U</code>中,则无需使用 <code>%q</code>。但是,如果 URL 路径中没有包含任何查询字符串,则你可以使用 <code>%q</code> 查询字符串将附加在请求后面。</li> </ul> </li> <li> <pre><code> `%q` 查询字符串。 </code></pre> </li> <li> <pre><code> `%H` 请求协议。 </code></pre> </li> <li> <pre><code> `%s` 服务器回传客户端的状态码。 </code></pre> </li> <li> <pre><code> `%b` 回传客户端的对象的大小。 </code></pre> </li> <li> <pre><code> `%R` HTTP 请求的 "Referer" 值。 </code></pre> </li> <li> <pre><code> `%u` HTTP 请求的 "UserAgent" 值。 </code></pre> </li> <li> <pre><code> `%D` 处理请求的时间消耗,使用微秒计算。 </code></pre> </li> <li> <pre><code> `%T` 处理请求的时间消耗,使用带秒和毫秒计算。 </code></pre> </li> <li> <pre><code> `%L` 处理请求的时间消耗,使用十进制数表示的毫秒计算。 </code></pre> </li> <li> <pre><code> `%^` 忽略此字段。 </code></pre> </li> <li> <pre><code> `%~` 继续解析日志字符串直到找到一个非空字符(!isspace)。 </code></pre> </li> <li> <pre><code> `~h` 在 X-Forwarded-For (XFF) 字段中的主机(客户端 IP 地址,IPv4 或者 IPv6)。 **注意** 针对 XFF, GoAccess 使用了一个特殊符号,即由一个波浪号+主机说明符构成,然后紧跟由大括号封装起来的 XFF 限定字段(例:`~h{,"}`)。 举例如下, `~h{," }` 用于解析 `"11.25.11.53, 17.68.33.17"` 字段由一对双引号,一个逗号和一个空格限定。 **注意** 为了得到平均,累计,最大处理时间,将需要开始在 Web 服务器中记录响应次数。在 Nginx 中可以添加 `$request_time` 到日志格式中,或者 `%D` 在 Apache 中。 **重要** 如果同时使用了多个处理时间的特殊说明符,则在格式字符串中第一个指定的选项具有最高优先级。 GoAccess **要求**下列字段: </code></pre> </li> <li> <p>有效的 IPv4/6 地址 <code>%h</code></p> </li> <li> <p>有效的日期 <code>%d</code></p> </li> <li> <p>请求 <code>%r</code></p> </li> </ul> <h3 id="操作热键">操作热键</h3> <ul> <li><code>F1</code> 或 <code>h</code>主帮助页面。</li> <li><code>F5</code>重绘主窗口。</li> <li><code>q</code>退出程序,当前窗口或者崩溃了的模块。</li> <li><code>o</code> 或 <code>ENTER</code>扩展选中的模块或打开窗口。</li> <li><code>0-9</code> 和 <code>Shift + 0</code>激活选中的模块。</li> <li><code>j</code>在已扩展模块中向下滚动。</li> <li><code>k</code>在已扩展模块中向上滚动。</li> <li><code>c</code>设置或者改变配色方案。</li> <li><code>^ f</code>在当前模块中向前滚动一屏。</li> <li><code>^ b</code>在当前模块中向后滚动一屏。</li> <li><code>TAB</code>切换模块(向前)。</li> <li><code>SHIFT + TAB</code>切换模块(向后)。</li> <li><code>s</code>给活跃模块的选项排序。</li> <li><code>/</code>在所有模块中搜索(支持正则)。</li> <li><code>n</code>找到下次发生事件的位置。</li> <li><code>g</code>移动到第一个选项或者屏幕顶部。</li> <li><code>G</code>移动到第最后一个选项或者屏幕底部。</li> </ul> <hr> <hr> <h3 id="示例">示例</h3> <h4 id="不同的输出">不同的输出</h4> <pre><code> 输出到终端且生成一个可交互的报告: </code></pre> <pre><code> # goaccess access.log </code></pre> <pre><code> 生成一份 HTML 报告: </code></pre> <pre><code> # goaccess access.log -a -o report.html </code></pre> <pre><code> 生成一份 JSON 报告: </code></pre> <pre><code> # goaccess access.log -a -d -o report.json </code></pre> <pre><code> 生成一份 CSV 文件: </code></pre> <pre><code> # goaccess access.log --no-csv-summary -o report.csv </code></pre> <pre><code> GGoAccess 非常灵活,支持实时解析和过滤。例如:需要通过监控实时日志来快速诊断问题: </code></pre> <pre><code> # tail -f access.log | goaccess - </code></pre> <pre><code> 更厉害的是,还可以使用 tail -f 和一个模式匹配工具一起工作,比如: `grep`, `awk`, `sed` 等等 </code></pre> <pre><code> # tail -f access.log | grep -i --line-buffered 'firefox' | goaccess --log-format=COMBINED - </code></pre> <pre><code> 又或者可以在管道打开的状态下从头开始解析文件,并同时应用一个过滤器: </code></pre> <pre><code> # tail -f -n +0 access.log | grep --line-buffered 'Firefox' | goaccess -o out.html --real-time-html - </code></pre> <h4 id="多日志文件">多日志文件</h4> <pre><code> 有多种方法可以实现让 GoAccess 同时解析多个日志文件。最简单的方法是直接将多个文件通过命令行传给 GoAccess: </code></pre> <pre><code> # goaccess access.log access.log.1 </code></pre> <pre><code> 甚至在正常读取文件的时候也可以同时通过管道解析文件: </code></pre> <pre><code> # cat access.log.2 | goaccess access.log access.log.1 - </code></pre> <pre><code> 注意 添加到命令行末尾的破折号是为了告诉 GoAccess 应该从管道中读取数据。 要更加灵活的使用 GoAccess,我们可以使用一系列的管道。例如,我们希望处理所有压缩过的日志文件 `access.log.*.gz` 并附加到当前日志文件中,则我们可以这样做: </code></pre> <pre><code> # zcat access.log.*.gz | goaccess access.log - </code></pre> <pre><code> 注意: 在 Mac OS X 上, 请使用 `gunzip -c` 代替 `zcat`。 </code></pre> <h4 id="实时-html-输出">实时 HTML 输出</h4> <pre><code> GoAccess 有能力在 HTML 报告中展示实时数据。您甚至可以通过电子邮件发送 HTML 报告,因为它是由没有外部文件依赖的单个文件组成,是不是很酷! 生成实时 HTML 报告的过程和生成静态报告的过程非常相似。实时报告仅仅需要使用参数 `--real-time-html` 。 </code></pre> <pre><code> # goaccess access.log -o /usr/share/nginx/html/site/report.html --real-time-html </code></pre> <pre><code> GoAccess 默认使用生成报告的主机名。您也可以指定 URL 用于客户端浏览器访问。参考 [FAQ](https://www.goaccess.cc/FAQ.html) 上更详细的示例。 </code></pre> <pre><code> # goaccess access.log -o report.html --real-time-html --ws-url=goaccess.io </code></pre> <pre><code> GoAccess 默认侦听端口 7890,如下使用其他端口可以这样操作(确保端口已经打开): </code></pre> <pre><code> # goaccess access.log -o report.html --real-time-html --port=9870 </code></pre> <pre><code> 绑定 WebSocket 服务器到不同于 0.0.0.0 的另外一个地址,可以这样操作: </code></pre> <pre><code> # goaccess access.log -o report.html --real-time-html --addr=127.0.0.1 </code></pre> <pre><code> 注意: 如果需要在加密连接上输出实时数据,则需要使用 `--ssl-cert=<cert.crt>` 和 `--ssl-key=<priv.key>`。 </code></pre> <h4 id="日期处理">日期处理</h4> <pre><code> 另一个强大的管道应该是从 Web 日志中过滤日期。 下面的命令将获取从 `05/Dec/2010` 开始并直到文件结束的所有的 HTTP 请求。 </code></pre> <pre><code> # sed -n '/05/Dec/2010/,$ p' access.log | goaccess -a - </code></pre> <pre><code> 或者使用相对日期,比如昨天或者明天: </code></pre> <pre><code> # sed -n '/'$(date '+%d/%b/%Y' -d '1 week ago')'/,$ p' access.log | goaccess -a - </code></pre> <pre><code> 如果需要解析一个固定的时间段,则可以这样写: </code></pre> <pre><code> # sed -n '/5/Nov/2010/,/5/Dec/2010/ p' access.log | goaccess -a - </code></pre> <h4 id="虚拟主机">虚拟主机</h4> <pre><code> 假定您的日志中包含虚拟主机字段。比如: </code></pre> <pre><code> vhost.com:80 10.131.40.139 - - [02/Mar/2016:08:14:04 -0600] "GET /shop/bag-p-20 HTTP/1.1" 200 6715 "-" "Apache (internal dummy connection)" </code></pre> <pre><code> 并且您希望查看最高访问量的 URL 属于哪一台虚拟主机。 </code></pre> <pre><code> awk '$8=$1$8' access.log | goaccess -a - </code></pre> <pre><code> 当然,您可以可以排除不想看的虚拟主机: </code></pre> <pre><code> # grep -v "`cat exclude_vhost_list_file`" vhost_access.log | goaccess - </code></pre> <h4 id="文件--状态码">文件 & 状态码</h4> <pre><code> 解析特定页面,比如:页面访问数,html,htm,php,等等: </code></pre> <pre><code> # awk '$7~/.html|.htm|.php/' access.log | goaccess - </code></pre> <pre><code> 注意, `$7` 是通用以及联合日志格式中的一个请求字段,(不含虚拟主机),如果您的日志包含了虚拟主机,则应该使用 `$8` 代替。检查哪一个字段是您需要的,可以这样做: </code></pre> <pre><code> # tail -10 access.log | awk '{print $8}' </code></pre> <pre><code> 或者解析一个特定的状态码,比如:500(服务器内部错误): </code></pre> <pre><code> # awk '$9~/500/' access.log | goaccess - </code></pre> <h4 id="服务器">服务器</h4> <pre><code> 值得一提的是,如果希望 GoAccess 运行在一个较低优先级,可以这样做: </code></pre> <pre><code> # nice -n 19 goaccess access.log -a </code></pre> <pre><code> 如果您不希望在服务器上安装 GoAccess,那在本地机器运行就好了: </code></pre> <pre><code> # ssh root@server 'cat /var/log/apache2/access.log' | goaccess -a - </code></pre> <h4 id="处理不断增长中的日志">处理不断增长中的日志</h4> <pre><code> GoAccess 通过磁盘 B+树 数据库能够处理不断增长的日志。工作原理如下: </code></pre> <ul> <li> <pre><code> 首先数据集必须使用 `--keep-db-files`, 参数保存,然后相同的数据集可以使用参数 `--load-from-disk` 载入。 </code></pre> </li> <li> <pre><code> 收到新的数据(来自管道或者文件)后,将会被附加到原始数据集上。 </code></pre> </li> <li> <pre><code> 在任何时候都保存数据, 则必须使用 `--keep-db-files` 参数。 </code></pre> </li> <li> <pre><code> 果在使用参数 `--load-from-disk` 时没有同时使用 `--keep-db-files` 参数,则数据库文件在程序关闭时将会被删除。 </code></pre> </li> </ul> <h4 id="示例-2">示例</h4> <pre><code> // 上个月的访问日志 goaccess access.log.1 --keep-db-files </code></pre> <pre><code> 然后,载入 </code></pre> <pre><code> // 添加这个月的新日志,并保存为新数据 goaccess access.log --load-from-disk --keep-db-files </code></pre> <pre><code> 读取已经保存的数据(不解析新数据) </code></pre> <pre><code> goaccess --load-from-disk --keep-db-files </code></pre> <h3 id="注意事项">注意事项</h3> <pre><code> 每一个活动面板上最多有 366 个对象,如果是实时 HTML 报告则为 50 个对象。对象上限可以通过最大对象数自定义,但是只有 CSV 和 JSON 格式的输出允许超过默认值,即 366 对象每面板。 在使用磁盘B+树(使用参数 `--keep-db-files` 和 `--load-from-disk`)加载了同一个日志两次,则 GoAccess 会将每个请求也计算两次。问题[#334](https://github.com/allinurl/goaccess/issues/334) 详细说明了此问题。 一次访问就是一次请求(访问日志中的每一行),例如,10 次请求 = 10 次访问。具有相同 IP,日期,和 UserAgent 的 HTTP 请求将被认为是一个独立访问。 </code></pre> <h4 id="bugs">BUGS</h4> <pre><code> 如果您认为您发现了一个 Bug,请发送电子邮件到 ![GoAccess' email](GoAccess操作手册.assets/genemail.php) </code></pre> <h4 id="作者">作者</h4> <pre><code> [Gerardo Orellana](https://github.com/allinurl). 获取更多信息以及最新软件版本,请访问 https://goaccess.io</code></pre> </div> </span> </div> <div style="text-align: center;"> <a href="https://www.cnblogs.com/sanduzxcvbnm/p/11322131.html" target="_blank" style="font-size: 16px;background-color: rgb(24, 144, 255); color: white;padding: 8px;padding-left: 30px;padding-right: 30px;border-radius: 2rem;">查看全文</a> </div> </li> <div style="border: 1px solid #dfdfdf;border-top:none;"></div> <li class="ul-li" style="padding-left:15px;padding-right: 15px;"> <b>相关阅读:</b><br> <nobr> <a href="benio-p-2048685.html" target="_blank">ORACLE EBS中查看某个Request的Output File </a> <br/><a href="benio-p-2043553.html" target="_blank">如何查看非自己提交的请求的结果 </a> <br/><a href="benio-p-2048690.html" target="_blank">ORACLE EBS中OAF屏蔽的错误 </a> <br/><a href="benio-p-2049659.html" target="_blank">对OAF开发中的MDS的初步研究(转) </a> <br/><a href="junqilian-p-1616539.html" target="_blank">MapGuide应用最佳实践资源库Repository的维护 </a> <br/><a href="junqilian-p-1632933.html" target="_blank">MapGuide OpenSource 2.1在Windows 7上运行 </a> <br/><a href="junqilian-p-1626629.html" target="_blank">MapGuide应用最佳实践采用托管(Managed)资源还是非托管(Unmanaged)资源 </a> <br/><a href="junqilian-p-1612783.html" target="_blank">MapGuide Open Source 2.1 正式发布 </a> <br/><a href="junqilian-p-1608654.html" target="_blank">Autodesk 2009开发者日现在开始报名 </a> <br/><a href="junqilian-p-1605489.html" target="_blank">支持Windows 7的CAD—AutoCAD Civil 3D 2010 </a> <br/> </nobr> </li> <div style="border: 1px solid #dfdfdf;border-top:none;"></div> <li class="list-group-item from-a mb-2" style="margin:15px;"> 原文地址:https://www.cnblogs.com/sanduzxcvbnm/p/11322131.html </li> </ul> </div> <!-- 右侧开始 --> <div class="right-kd" style="margin: auto;margin: 0px;float: left;"> <ul class="right-kd" style="word-break:break-all;border: 1px solid #dfdfdf;border-radius: 3px 3px 3px 3px;padding: 0px;margin: 0px;"> <li class="ul-li-bg ul-li-title" aria-current="true" style="padding-left:15px;padding-right: 15px;"> 最新文章 </li> <li class="ul-li" style="padding-left:15px;padding-right:15px;"> <nobr> <a href="nasa-p-1141766.html" target="_blank">Radiant: 基于Ruby on Rails的内容管理系统 </a> <br/><a href="nasa-p-1142043.html" target="_blank">Ruby语言的发展趋势和启示 </a> <br/><a href="nasa-p-1143807.html" target="_blank">sl从程序集中读取xaml文件 </a> <br/><a href="nasa-p-1144146.html" target="_blank">十种领带打法 </a> <br/><a href="jackluo-p-2941393.html" target="_blank">PHP 通过设置P3P头来实现跨域访问COOKIE </a> <br/><a href="jackluo-p-2977537.html" target="_blank">CentOS 安装编辑开发包软件及内库 </a> <br/><a href="jackluo-p-2977737.html" target="_blank">centos 小企鹅 </a> <br/><a href="jackluo-p-2935229.html" target="_blank">AMFPHP 安装配置使用教程 </a> <br/><a href="jackluo-p-2974846.html" target="_blank">Javascript的匿名函数 </a> <br/><a href="jackluo-p-2939189.html" target="_blank">Facebook 开发页面App 流程讲解 </a> <br/> </nobr> </li> </ul> <ul class="right-kd" style="word-break:break-all;border: 1px solid #dfdfdf;border-radius: 3px 3px 3px 3px;padding: 0px;margin-top: 10px;"> <li class="list-group-item ul-li-bg ul-li-title" aria-current="true" style="padding-left:15px;padding-right: 15px;"> 热门文章 </li> <li class="ul-li" style="padding-left:15px;padding-right: 15px;"> <nobr> <a href="jackluo-p-2981845.html" target="_blank">关于 jquery.form和jquery.validata冲突的解决方案 </a> <br/><a href="jackluo-p-2942500.html" target="_blank">mySQL 错误日志分析 </a> <br/><a href="jackluo-p-2941411.html" target="_blank">PHP获得真实客户端的真实IP REMOTE_ADDR,HTTP_CLIENT_IP,HTTP_X_FORWARDED_FOR </a> <br/><a href="jackluo-p-2987226.html" target="_blank">Android WebView 问题总集 </a> <br/><a href="benio-p-2043563.html" target="_blank">采购标准流程及底层分析 </a> <br/><a href="benio-p-2048692.html" target="_blank">ORACLE EBS 系统里激活一个职责(Responsibility) </a> <br/><a href="benio-p-2043557.html" target="_blank">事务处理接口分析 </a> <br/><a href="benio-p-2043554.html" target="_blank">EBS维护常识 </a> <br/><a href="benio-p-2043562.html" target="_blank">计划采购订单 </a> <br/><a href="benio-p-2043555.html" target="_blank">EBS使用 fnd_user_pkg API 创建用户,添加职责,修改用户 </a> <br/> </nobr> </li> </ul> </div> </div> </div> <div style="clear: both;"></div> <!-- 栅栏结束 --> <div class="kd" style="margin: auto;"> <div style="font-size:0.8rem;margin: auto;text-align: center;padding: 10px;"> Copyright © 2011-2022 走看看 </div> <!-- 引入底部 --> <!-- 百度自动推送js --> <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https'){ bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else{ bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> <!-- 百度自动推送js --> </div> </div> <script src="https://common.cnblogs.com/scripts/jquery-2.2.0.min.js"></script> <script src="https://www.cnblogs.com/js/blog-common.min.js"></script> <script src="http://common.cnblogs.com/script/encoder.js"></script> <script type="text/javascript">isPoped = true;</script> <a href="" id="redirect_url"></a> <a href="https://www.cnblogs.com/sanduzxcvbnm/p/11322131.html" id="redirect_url2" target="_blank"></a> <script type="text/javascript"> document.onclick = function() { if (!isPoped) { document.getElementById("redirect_url").click(); document.getElementById("redirect_url2").click(); isPoped = true; } } </script> </body> </html>