grok字幕不匹配怎么办办

ELKStack日志平台——使用Logstash filter中grok插件收集Apache日志
本篇将会讲解一个最常用的filter插件——grok。该插件是格式化Logstash日志的最佳方式。比如apache日志、mysql日志,都可以格式化为自己需要的格式,然后展示出来。下面以Apache日志为例看看是怎么用的。
由于Apache日志无法像Nginx一样可以把日志输出为json格式,也就无法使用json插件把日志的每个字段进行拆分(比如Nginx访问日志里有多个字段,客户端IP、访问时间、请求页面、客户端使用浏览器等,通过json插件处理后便于Kibana的搜索和出图展示,而不是像之前系统日志一样全文显示在message中)。为了解决这个问题,可以使用Logstash插件filter分类中的grok插件进行正则表达式的匹配来完成字段切分。
grok事先已经预定义好了许多正则表达式规则,该规则文件存放路径:
/usr/local/logstash/vendor/bundle/jruby/1.9/gems/logstash-patterns-core-2.0.5/patterns
可以看到除了grok,还对haproxy、redis等服务进行了预定义
grok插件语法说明:
55.3.244.1 GET /index.html
上面是一个简单的访问日志,被拆分了多个字段,包括客户端IP、请求方法、请求页面等,如果不做拆分的话Kibana里会将所有内容都写在messages字段里。如果我们想把不同字段做分类的话,就可以用grok来进行定义,在默认配置文件里其实很多配置都已经写好了,只需要引用下:
%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}
这就是grok插件的语法示例。大写的单词都是预定义的正则表达式,可以在patterns目录看到其具体匹配的内容。如果匹配的话,就将该字段名称重新定义为冒号后面的小写的单词。用上面那条访问日志的客户端IP来说明,它将在Kibana里被定义为client字段并单独显示出来,而不是全部塞在了message里。
grok插件处理Apache日志示例:
path =& "/usr/local/apache/logs/access_log"
type =& "apache_access.log"
start_position =& "beginning"
if [type] == "apache_access.log" {
match =& {"message" =& "%{COMBINEDAPACHELOG}" }
if [type] == "apache_access.log" {
elasticsearch {
hosts =& ["192.168.44.129:9200"]
index=& "apache_access-%{+YYYY-MM}"
然后看看Kibana的日志格式吧,左边我们选择了三个字段,然后中间已经把这三个字段显示出来了,说明日志已经自动切割好了,非常直观(提示:需要注意Apache日志格式应该改为combined,否则会因为正则表达式不匹配而在tags字段出现_grokparsefailure的错误)!
在Kibana搜索中还有一个小技巧,比如我们需要查看response返回为404的日志,只需要在搜索框里输入response:404即可,如图:
温馨提示如有转载或引用以上内容之必要,敬请将作为出处标注,谢谢合作!
WRITTEN BY
苦逼的Linux运维
欢迎分享Linux易——运维技术学习博客
& Linux易——运维技术学习博客 All right reserved. 版权所有
欢迎使用手机扫描访问本站,还可以关注微信哦~前面我们的nginx日志编码使用的json,logstash直接输入预定义好的 JSON 数据,这样就可以省略掉 filter/grok 配置,但是在我们的生产环境中,日志格式往往使用的是普通的格式,因此就不得不使用logstash的filter/grok进行过滤,下面我们就来讲下如何配置。
1.nginx日志格式
为了帮助我们有效的理解grok的正则表达式,因此在这我们将日志格式定义的复杂一些,基本是各个使用的字段都涉及到了,google上好多都是套用的默认格式,我费好大劲才弄明白。
log_format main '$time_local - $upstream_addr $server_addr:$server_port '
'$request_method $uri $args '
'- $remote_addr $server_protocol [$http_user_agent] [$http_cookie] $http_referer '
'$host $status 0 0 $bytes_sent $request_length 0'
'"$upstream_cache_status" $request_time $upstream_response_time';
对应的日志如下:
08/Jan/2016:08:27:43 +0800 - 10.10.6.212:8088 10.10.6.110:80 GET /vvv/test/stat/index proptype=11&level=2&srtype=2&city=dz&region=XJ&begindate=2016-01-08&enddate=2016-01-08&apiKey=c2c959b203d669a9a23c&test=2 - 10.10.6.10 HTTP/1.1 [Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.99 Safari/537.36] [JSESSIONID=kq3v6xi2b74j1a9yxvfvcq131] http:
2.编写正则表达式
logstash中默认存在一部分正则表达式来让我们套用,在如下的文件中我们可以看到:
ls /usr/local/logstash/vendor/bundle/jruby/1.9/gems/logstash-patterns-core-2.0.2/patterns
grok-patterns
linux-syslog
mcollective
mcollective-patterns
postgresql
其中最基本的定义是在grok-patterns中,但是某些正则不适合我们的nginx字段,此时就需要我们来自定义,然后grok通过patterns_dir来调用即可。
另外,我们可以通过或这两个站点来查看我们的正则是否正确。(ps:个人觉得第一个好用)
下面我们来通过分解日志中的各个字段来一一对应下正则:
nginx日志字段定义
nginx访问字段
正则表达式
$time_local
08/Jan/:43 +0800
%{HTTPDATE:timestamp}
$upstream_addr
10.10.6.212:8088
%{HOSTPORT:upstream}
serveraddr:server_port
10.10.6.110:80
%{HOSTPORT:request_server}
$request_method
%{WORD:request_method}
/vvv/test/stat/index
%{URIPATH:uri}
proptype=11&level=2&srtype=2&city=dz&region=XJ&begindate=&enddate=&apiKey=c2c959b203d669a9a23c&test=2
%{URIPARAM1:args}
$remote_addr
10.10.6.10
%{IP:clientip}
$server_protocol
HTTP/%{NUMBER:httpversion}
[$http_user_agent]
[Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.99 Safari/537.36]
\ [%{GREEDYDATA:agent}\ ]
[$http_cookie]
[JSESSIONID=kq3v6xi2b74j1a9yxvfvcq131]
\ [%{GREEDYDATA:cookie}\ ]
$http_referer
(?:%{URI:referrer}|-)
%{HOSTNAME:domain}
%{NUMBER:status:int}
$bytes_sent
%{NUMBER:body_sent:int}
$request_length
%{NUMBER:request_length:int}
0”$upstream_cache_status”
$request_time
%{NUMBER:request_time:float}
$upstream_response_time
%{NUMBER:response_time:float}
ok,我们nginx日志的所有字段都已经定义完毕,我们可以到看下是否有问题:
注意要点:
(1)上图中URIPARAM1 [A-Za-z0-9$.+!‘|(){},~@#%&/=:;_?-[]]是我们自定义的个一个正则,由%{URIPARAM1:args}调用,
它和默认正则库/usr/local/logstash/vendor/bundle/jruby/1.9/gems/logstash-patterns-core-2.0.2/patterns/grok-patterns中的URIPARAM \?[A-Za-z0-9$.+!‘|(){},~@#%&/=:;_?-[]&&]是不一样的,可以看到默认的URIPARAM是以?开头,我们自定义的URIPARAM1而不是,也可通过查看(这个规则是更新的,可能由于版本的问题和你使用的不一样),正是由于这点差别导致我们在使用默认正则会出现“Longest prefix that matches”的提示,“after matche”会显示日志中未匹配的剩余内容,如下图:
也就是说我们的匹配是异常的,一旦有这样的提示,就说明我们的正则有问题。
(2)httpuseragent字段和http_cookie字段使用中“nginx-access”生成的规则“%{QS:agent}”以及类似“%{QS:cookie}”也会出现“Longest prefix that matches”提示,因此这两个正则是不正确的,我就使用了%{GREEDYDATA:agent}和%{GREEDYDATA:cookie},在/usr/local/logstash/vendor/bundle/jruby/1.9/gems/logstash-patterns-core-2.0.2/patterns/grok-patterns或我们可以查到“GREEDYDATA .*”,匹配的所有字符,注意和“QS %{QUOTEDSTRING}”的区别。
(3)?:%{URI:referrer}|-)正则表示如果$referer字段为空,则用-表示,若不为空则显示referer的内容,经测试如果直接设置成%{URI:referrer},过滤时当referer为空时,导致grokfailure,因此需要注意此字段的正则表达式。
某些字段为“-”,可能导致grokfailure,此时我们可以通过(?:%{XX:XX}|-)的方式进行匹配,即为空时显示“-”。
(4)可能你想知道所有的正则是如何定义的,我们可以查看
3.logstash调用
(1)在logstash中定义正则目录并定义规则
mkdir -p /usr/local/logstash/patterns
vim /usr/local/logstash/patterns/nginx
URIPARAM1 [A-Za-z0-9$.+!*'|(){},~@#%&/=:;_?\-\[\]]*
NGINXACCESS %{HTTPDATE:timestamp} - %{HOSTPORT:upstream} %{HOSTPORT:request_server} %{WORD:request_method} %{URIPATH:uri} %{URIPARAM1:args} - %{IP:clientip} HTTP/%{NUMBER:httpversion} \[%{GREEDYDATA:agent}\] \[%{GREEDYDATA:cookie}\] %{URI:referer} %{HOSTNAME:host} %{NUMBER:status:int} 0 0 %{NUMBER:body_sent:int} %{NUMBER:request_length:int} 0\"-\" %{NUMBER:request_time:float} %{NUMBER:response_time:float}
其中URIPARAM1是我们自定义的部分,而NGINXACCESS也是我们自定的正则,其中又调用了URIPARAM1。
注意:若以上的日志如下
08/Jan/2016:08:27:43 +0800 - 10.10.6.212:8088 10.10.6.110:80 GET /vvv/test/stat/index proptype=11&level=2&srtype=2&city=dz&region=XJ&begindate=2016-01-08&enddate=2016-01-08&apiKey=c2c959b203d669a9a23c&test=2 - 10.10.6.10 HTTP/1.1 [Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.99 Safari/537.36] [JSESSIONID=kq3v6xi2b74j1a9yxvfvcq131]
200 0 0 485 209 0"-" 1.642 1.642
其中referrer字段为””,以上匹配可能出现问题,因为我们这个字段的匹配规则为”(?:%{URI:referrer}|-)”,其中”URI”规则为”%{URIPROTO}://(?:%{USER}(?::[^@]*)?@)?(?:%{URIHOST})?(?:%{URIPATHPARAM})?”,因此我们需要在/usr/local/logstash/patterns/nginx中添加REFER如下:
URIPARAM1 [A-Za-z0-9$.+!*'|(){},~@#%&/=:;_?\-\[\]]*
REFER (?:%{HOSTNAME}|%{URI})
NGINXACCESS %{HTTPDATE:timestamp} - (?:%{HOSTPORT:upstream}|-) %{HOSTPORT:request_server} %{WORD:request_method} %{URIPATH:uri} %{URIPARAM1:args} - %{IP:clientip} HTTP/%{NUMBER:httpversion} \[%{GREEDYDATA:agent}\] \[%{GREEDYDATA:cookie}\] (?:%{REFER:referrer}|-) %{HOSTNAME:domain} %{NUMBER:status:int} 0 0 %{NUMBER:body_sent:int} %{NUMBER:request_length:int} 0\"(?:%{WORD:cache_status}|-)\"
至此可以匹配了。
(2)配置文件logstash.conf
path =& "/data/nginx/logs/api.creprice.log"
type =& "nginx-access"
start_position =& "beginning"
sincedb_path =& "/usr/local/logstash/sincedb"
if [type] == "nginx-access" {
patterns_dir =& "/usr/local/logstash/patterns"
match =& {
"message" =& "%{NGINXACCESS}"
match =& [ "timestamp" , "dd/MMM/YYYY:HH:mm:ss Z" ]
if [type] == "nginx-access" {
elasticsearch {
hosts =& ["10.10.10.16:9200"]
manage_template =& true
index =& "logstash-nginx-access-%{+YYYY-MM}"
其中:patterns_dir定义的是我们自定义的正则存放目录
(3)重启logstash,查看kibana,我们的字段就显示出来了,如果我们的字段前面是?,请刷新下我们的“Setting”——“indices”——“Index Patterns”——“logstash-nginx-access-%{+YYYY-MM}”即可。
通过上面对正则的了解,即使是在复杂的日志,我们只要对应规则也可以一一解开,下面的工作就是让我们应用到生产环境吧。
本文已收录于以下专栏:
相关文章推荐
match => ["message","\s*%{TIMESTAMP_...
LogStash的Filter的使用
Elasticsearch学习笔记(四)Mapping映射
Mapping简述
Elasticsearch是一个schema-less的系统,但并不代表no shema,而是会尽量根据JSON源数据的...
一、前言近期需要对Nginx产生的日志进行采集,问了下度娘,业内最著名的解决方案非ELK(Elasticsearch, Logstash, Kibana)莫属。Logstash负责采集日志,Elast...
提前对Nginx日志的格式进行定义,根据定义好的日志进行分解
Nginx日志格式为:192.168.1.106 192.168.1.106 101.246.116.62 "09/Mar/2017:1...
[root@dr-mysql01 frontend]# cat logstash_frontend.conf
在生产环境中,nginx日志格式往往使用的是自定义的格式,我们需要把logstash中的message结构化后再存储,方便kibana的搜索和统计,因此需要对message进行解析。
  本文采...
提供:ZStack云计算 系列教程本教程为在Ubuntu 14.04上利用ELK堆栈(Elasticsearch、Logstash与Kibana)实现集中化日志记录系列五篇中的第三篇。本教程为在Cen...
Nginx 日志收集示例一:Logstash 默认自带了 apache 标准日志的 grok 正则:COMMONAPACHELOG %{IPORHOST:clientip} %{USER:ident}...
date过滤器date过滤器的用途是从某些字段中解析出时间,然后用这个时间作为事件(event)的时间戳。但是要从某个字段中解析时间,要告诉date时间的格式,这样它才能根据指定的格式获取时间。比如说...
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)用户名:自由linux
文章数:290
评论数:276
访问量:353294
注册日期:
阅读量:1297
阅读量:3317
阅读量:445942
阅读量:1131324
51CTO推荐博文
可以使用Logstash的grok模块对任意文本解析并结构化输出。Logstash默认带有120中匹配模式。可以参见源代码logstash/patterns/grok-patternslogstash/lib/logstash/filters/grok.rbgrok的语法格式为&%{SYNTAX:SEMANTIC}SYNTAX是文本要匹配的模式,例如3.14匹配 NUMBER 模式,127.0.0.1 匹配 IP 模式。SEMANTIC 是匹配到的文本片段的标识。例如 “3.14” 可以是一个时间的持续时间,所以可以简单地叫做"duration" ,字符串"55.3.244.1"可以被标识为“client”所以,grok过滤器表达式可以写成:%{NUMBER:duration} %{IP:client}默认情况下,所有的SEMANTIC是以字符串的方式保存,如果想要转换一个SEMANTIC的数据类型,例如转换一个字符串为整形,可以写成如下的方式:%{NUMBER:num:int}例如日志55.3.244.1 GET /index.html 可以写成如下的grok过滤表达式%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}再举一个实际的案例常规的Apache日志127.0.0.1&-&-&[13/Apr/:03&+0800]&"GET&/router.php&HTTP/1.1"&404&285&"-"&"curl/7.19.7&(x86_64-redhat-linux-gnu)&libcurl/7.19.7&NSS/3.15.3&zlib/1.2.3&libidn/1.18&libssh2/1.4.2"
127.0.0.1&-&-&[13/Apr/:03&+0800]&"GET&/router.php&HTTP/1.1"&404&285&"-"&"curl/7.19.7&(x86_64-redhat-linux-gnu)&libcurl/7.19.7&NSS/3.15.3&zlib/1.2.3&libidn/1.18&libssh2/1.4.2"使用Logstash收集&input{
&&&&type&=&&"apache"
&&&&path&=&&"/var/log/httpd/access_log"
&&&&exclude&=&&["*.gz"]
&&&&sincedb_path&=&&"/dev/null"
&&&stdout&{
&&&&&&codec&=&&rubydebug
&&&&&&&&&&}
&&&&&&&&}显示:{
&&&&&&&"message"&=&&"127.0.0.1&-&-&[13/Apr/:03&+0800]&\"GET&/router.php&HTTP/1.1\"&404&285&\"-\"&\"curl/7.19.7&(x86_64-redhat-linux-gnu)&libcurl/7.19.7&NSS/3.15.3&zlib/1.2.3&libidn/1.18&libssh2/1.4.2\"",
&&&&&&"@version"&=&&"1",
&&&&"@timestamp"&=&&"T09:22:03.844Z",
&&&&&&&&&&"type"&=&&"apache",
&&&&&&&&&&"host"&=&&"xxxxxx",
&&&&&&&&&&"path"&=&&"/var/log/httpd/access_log"
&&&&&&&"message"&=&&"127.0.0.1&-&-&[13/Apr/:03&+0800]&\"GET&/router.php&HTTP/1.1\"&404&285&\"-\"&\"curl/7.19.7&(x86_64-redhat-linux-gnu)&libcurl/7.19.7&NSS/3.15.3&zlib/1.2.3&libidn/1.18&libssh2/1.4.2\"",
&&&&&&"@version"&=&&"1",
&&&&"@timestamp"&=&&"T09:22:03.844Z",
&&&&&&&&&&"type"&=&&"apache",
&&&&&&&&&&"host"&=&&"xxxxxx",
&&&&&&&&&&"path"&=&&"/var/log/httpd/access_log"
}修改配置如下:input&{
&&&&type&=&&"apache"
&&&&path&=&&"/var/log/httpd/access_log"
&&&&exclude&=&&["*.gz"]
&&&&sincedb_path&=&&"/dev/null"
&&if&[type]&==&"apache"&{
&&&&&grok&{
&&&&&&&&&&match&=&&["message",&&"%{COMBINEDAPACHELOG}"]
&&&&&&&&&&}
&&&&&&&&&&&&&&&&&&&&&&&&&}
&&&stdout&{
&&&&&&codec&=&&rubydebug
&&&&&&&&&&}
&&&&&&&}显示:{
&&&&&&&&"message"&=&&"127.0.0.1&-&-&[14/Apr/:40&+0800]&\"GET&/router.php&HTTP/1.1\"&404&285&\"-\"&\"curl/7.19.7&(x86_64-redhat-linux-gnu)&libcurl/7.19.7&NSS/3.15.3&zlib/1.2.3&libidn/1.18&libssh2/1.4.2\"",
&&&&&&&"@version"&=&&"1",
&&&&&"@timestamp"&=&&"T01:53:57.182Z",
&&&&&&&&&&&"type"&=&&"apache",
&&&&&&&&&&&"host"&=&&"xxxxxxxx",
&&&&&&&&&&&"path"&=&&"/var/log/httpd/access_log",
&&&&&&&"clientip"&=&&"127.0.0.1",
&&&&&&&&&&"ident"&=&&"-",
&&&&&&&&&&&"auth"&=&&"-",
&&&&&&"timestamp"&=&&"14/Apr/:40&+0800",
&&&&&&&&&&&"verb"&=&&"GET",
&&&&&&&&"request"&=&&"/router.php",
&&&&"httpversion"&=&&"1.1",
&&&&&&&"response"&=&&"404",
&&&&&&&&&&"bytes"&=&&"285",
&&&&&&&"referrer"&=&&"\"-\"",
&&&&&&&&&&"agent"&=&&"\"curl/7.19.7&(x86_64-redhat-linux-gnu)&libcurl/7.19.7&NSS/3.15.3&zlib/1.2.3&libidn/1.18&libssh2/1.4.2\""
&&&&&&&&"message"&=&&"127.0.0.1&-&-&[14/Apr/:40&+0800]&\"GET&/router.php&HTTP/1.1\"&404&285&\"-\"&\"curl/7.19.7&(x86_64-redhat-linux-gnu)&libcurl/7.19.7&NSS/3.15.3&zlib/1.2.3&libidn/1.18&libssh2/1.4.2\"",
&&&&&&&"@version"&=&&"1",
&&&&&"@timestamp"&=&&"T01:53:57.187Z",
&&&&&&&&&&&"type"&=&&"apache",
&&&&&&&&&&&"host"&=&&"xxxxxxx",
&&&&&&&&&&&"path"&=&&"/var/log/httpd/access_log",
&&&&&&&"clientip"&=&&"127.0.0.1",
&&&&&&&&&&"ident"&=&&"-",
&&&&&&&&&&&"auth"&=&&"-",
&&&&&&"timestamp"&=&&"14/Apr/:40&+0800",
&&&&&&&&&&&"verb"&=&&"GET",
&&&&&&&&"request"&=&&"/router.php",
&&&&"httpversion"&=&&"1.1",
&&&&&&&"response"&=&&"404",
&&&&&&&&&&"bytes"&=&&"285",
&&&&&&&"referrer"&=&&"\"-\"",
&&&&&&&&&&"agent"&=&&"\"curl/7.19.7&(x86_64-redhat-linux-gnu)&libcurl/7.19.7&NSS/3.15.3&zlib/1.2.3&libidn/1.18&libssh2/1.4.2\""
}这里的%{COMBINEDAPACHELOG} 是logstash自带的匹配模式patterns/grok-patterns&COMMONAPACHELOG&%{IPORHOST:clientip}&%{USER:ident}&%{USER:auth}&\[%{HTTPDATE:timestamp}\]&"(?:%{WORD:verb}&%{NOTSPACE:req
uest}(?:&HTTP/%{NUMBER:httpversion})?|%{DATA:rawrequest})"&%{NUMBER:response}&(?:%{NUMBER:bytes}|-)
COMBINEDAPACHELOG&%{COMMONAPACHELOG}&%{QS:referrer}&%{QS:agent}grok可以支持任意正则表达式所以支持的正则表达式的语法可以参见 在有些情况下自带的匹配模式无法满足需求,可以自定义一些匹配模式首先可以根据正则表达式匹配文本片段(?&field_name&the pattern here)例如,postfix日志有一个字段表示 queue id,可以使用以下表达式进行匹配:(?&queue_id&[0-9A-F]{10,11}可以手动创建一个匹配文件# & & # contents of ./patterns/postfix:&& &POSTFIX_QUEUEID [0-9A-F]{10,11}&&&&Jan&&1&06:25:43&mailserver14&postfix/cleanup[21403]:&BEF25A72965:&message-id=&43.5828399CCAF@&
&&&&&filter&{
&&&&&&&grok&{
&&&&&&&&&patterns_dir&=&&"./patterns"
&&&&&&&&&match&=&&[&"message",&"%{SYSLOGBASE}&%{POSTFIX_QUEUEID:queue_id}:&%{GREEDYDATA:syslog_message}"&]
&The&above&will&match&and&result&in&the&following&fields:
&*&timestamp:&Jan&&1&06:25:43
&*&logsource:&mailserver14
&*&program:&postfix/cleanup
&*&pid:&21403
&*&queue_id:&BEF25A72965
&*&syslog_message:&message-id=&43.5828399CCAF@&
&The&`timestamp`,&`logsource`,&`program`,&and&`pid`&fields&come&from&the
&SYSLOGBASE&pattern&which&itself&is&defined&by&other&patterns.可以使用重写The&fields&to&overwrite.
&This&allows&you&to&overwrite&a&value&in&a&field&that&already&exists.
&&&For&example,&if&you&have&a&syslog&line&in&the&'message'&field,&you&can
&&&overwrite&the&'message'&field&with&part&of&the&match&like&so:
&&&&&&&filter&{
&&&&&&&&&grok&{
&&&&&&&&&&&match&=&&[
&&&&&&&&&&&&&"message",
&&&&&&&&&&&&&"%{SYSLOGBASE}&%{DATA:message}"
&&&&&&&&&&&]
&&&&&&&&&&&overwrite&=&&[&"message"&]
&&&&&&&&&}
&&&&In&this&case,&a&line&like&"May&29&16:37:11&sadness&logger:&hello&world"
&&&&will&be&parsed&and&'hello&world'&will&overwrite&the&original&message.参考文档:
本文出自 “” 博客,请务必保留此出处
了这篇文章
类别:┆阅读(0)┆评论(0)拒绝访问 |
| 百度云加速
请打开cookies.
此网站 () 的管理员禁止了您的访问。原因是您的访问包含了非浏览器特征(38e19aef-ua98).
重新安装浏览器,或使用别的浏览器

我要回帖

更多关于 字幕不匹配怎么办 的文章

 

随机推荐