Logstash 使用總結(jié)

Logstash使用配置

運(yùn)行:bin/logstash -f /home/logstash.conf

logstash.conf

#整個(gè)配置文件分為三部分:input,filter,output

input {

#輸入

}

filter{

#過(guò)濾匹配

}

output {

#輸出

}

1殉摔、input配置

1.1 file{}(文件讀缺雒)

監(jiān)聽(tīng)文件變化抓韩,記錄一個(gè)叫.sincedb的數(shù)據(jù)庫(kù)文件來(lái)跟蹤被監(jiān)聽(tīng)的日志文件的當(dāng)前讀取位(也就是時(shí)間戳)

格式:

input {

#file可以多次使用吮成,也可以只寫(xiě)一個(gè)file而設(shè)置它的path屬性配置多個(gè)文件實(shí)現(xiàn)多文件監(jiān)控

file {

path =>["/var/log/access.log", "/var/log/message"]#監(jiān)聽(tīng)文件路徑

type => "system_log"#定義事件類型

start_position =>"beginning"#檢查時(shí)間戳

}

}

參數(shù)說(shuō)明:

exclude:排除掉不想被監(jiān)聽(tīng)的文件

stat_interval:logstash每隔多久檢查一次被監(jiān)聽(tīng)文件狀態(tài)(是否有更新)婆咸,默認(rèn)是1秒。

start_position:logstash默認(rèn)是從結(jié)束位置開(kāi)始讀取文件數(shù)據(jù)婴削,也就是說(shuō)logstash進(jìn)程會(huì)以類似tail -f的形式運(yùn)行徙硅。如果你是要導(dǎo)入原有數(shù)據(jù),把這個(gè)設(shè)定改成“beginning”焰情,logstash進(jìn)程就按時(shí)間戳記錄的地方開(kāi)始讀取陌凳,如果沒(méi)有時(shí)間戳則從頭開(kāi)始讀取,有點(diǎn)類似cat内舟,但是讀到最后一行不會(huì)終止冯遂,而是繼續(xù)變成tail -f。

1.2 codec(定義編碼類型)

優(yōu)化建議:直接輸入預(yù)定義好的JSON數(shù)據(jù)谒获,這樣就可以省略掉filter/grok配置蛤肌,從而減輕過(guò)濾器logstash的CPU負(fù)載消耗;

配置文件示例:

input {

file {

type =>"access_u_ex"

#添加自定義字段

add_field => {"fromhost"=>"EIR"}

#監(jiān)聽(tīng)文件的路徑

path =>"D:/java/logs/test/test1*"

#排除不想監(jiān)聽(tīng)的文件

exclude =>"test13.log"

#監(jiān)聽(tīng)文件的起始位置

start_position =>"beginning"

#增加標(biāo)簽

#tags =>

"tag1"

#設(shè)置多長(zhǎng)時(shí)間掃描目錄批狱,發(fā)現(xiàn)新文件

#discover_interval=> 15

#設(shè)置多長(zhǎng)時(shí)間檢測(cè)文件是否修改

#stat_interval

=> 1

codec => multiline {

charset =>"GB2312"

patterns_dir => ["d:/java/logstash-2.3.4/bin/patterns"]

pattern =>"^%{SECOND_TIME}"

negate =>true

what =>"previous"

}

}

}

從上到下裸准,解釋下配置參數(shù)的含義。

file :讀取文件赔硫。

path :日志文件絕對(duì)路徑(只支持文件的絕對(duì)路徑)炒俱。

type :定義類型,以后的filter、output都會(huì)用到這個(gè)屬性权悟。

add_field:添加字段砸王,盡量不要與現(xiàn)有的字段重名。重名的話可能會(huì)有不同錯(cuò)誤出現(xiàn)峦阁。

start_position:從什么位置開(kāi)始讀取文件谦铃,默認(rèn)是結(jié)束位置。如果要導(dǎo)入原有數(shù)據(jù)榔昔,把這個(gè)設(shè)定改為beginning .

discover_interval:設(shè)置多長(zhǎng)時(shí)間檢查一個(gè)被監(jiān)聽(tīng)的path下面是否有新文件驹闰。默認(rèn)時(shí)間是15秒.

exclude:不想監(jiān)聽(tīng)的文件排除出去。

stat_interval:設(shè)置多久時(shí)間檢查一次被監(jiān)聽(tīng)的文件(是否有更新)撒会,默認(rèn)是1秒嘹朗。

說(shuō)明

a、有時(shí)候path可能需要配置多個(gè)路徑:

path => ["D:/java/logs/test/test1*","D:/java/logs/test/test2*"]

b诵肛、add_field添加字段時(shí)屹培,想判斷要添加的字段是否存在,不存在時(shí)添加

if![field1]{

mutate{

add_field=> {"field1" => "test1"}

}

}

codec編碼插件

logstash實(shí)際上是一個(gè)input | codec | filter | codec |

output的數(shù)據(jù)流。codec是用來(lái)decode怔檩、encode事件的惫谤。

Multiline合并多行數(shù)據(jù)

Multiline有三個(gè)設(shè)置比較重要:pattern、negate珠洗、what .

pattern:必須設(shè)置,String類型若专,沒(méi)有默認(rèn)值许蓖。匹配的是正則表達(dá)式。上面配置中的含義是:通過(guò)SECOND_TIME字段與日志文件匹配调衰,判斷文件開(kāi)始位置膊爪。

negate:boolean類型,默認(rèn)為false .如果沒(méi)有匹配嚎莉,否定正則表達(dá)式米酬。

what:必須設(shè)置,可以設(shè)置為previous或next .(ps:還沒(méi)弄清楚兩者之間的關(guān)系趋箩,目前我用的都是previous )赃额。

根據(jù)上面的配置,還有兩個(gè)設(shè)置:charset叫确、patterns_dir跳芳。

charset :一般都知道是編碼,這個(gè)就不多說(shuō)了竹勉。

patterns_dir:從配置中看到的是一個(gè)文件路徑飞盆。

2、filter過(guò)濾器配置

2.1 data(時(shí)間處理)

用來(lái)轉(zhuǎn)換日志記錄中的時(shí)間字符串,變成LogStash::Timestamp對(duì)象吓歇,然后轉(zhuǎn)存到@timestamp字段里孽水。

注意:因?yàn)樵谏院蟮膐utputs/elasticsearch中index常用的%{+YYYY.MM.dd}這種寫(xiě)法必須讀取@timestamp數(shù)據(jù),所以一定不要直接刪掉這個(gè)字段保留自己的時(shí)間字段城看,而是應(yīng)該用filters/date轉(zhuǎn)換后刪除自己的字段女气!至于elasticsearch中index使用%{+YYYY.MM.dd}這種寫(xiě)法的原因后面會(huì)說(shuō)明。

格式:

filter{

grok {

match =>["message", "%{HTTPDATE:logdate}"]

}

date {

match=> ["logdate", "dd/MMM/yyyy:HH:mm:ss Z"]

}

}

2.2 grok(正則匹配)

語(yǔ)法格式如下:

%{正則表達(dá)式或正則子句:你要賦值的變量名}

filter{

grok {

match => [ "message","\s+(?\d+?)\s+" ]#python的正則有點(diǎn)差別

}

}

%{語(yǔ)法:語(yǔ)義}

“語(yǔ)法”指的就是匹配的模式析命,例如使用NUMBER模式可以匹配出數(shù)字主卫,IP則會(huì)匹配出127.0.0.1這樣的IP地址:

%{NUMBER:lasttime}%{IP:client}

默認(rèn)情況下,所有“語(yǔ)義”都被保存成字符串鹃愤,你也可以添加轉(zhuǎn)換到的數(shù)據(jù)類型

%{NUMBER:lasttime:int}%{IP:client}

目前轉(zhuǎn)換類型只支持int和float

優(yōu)化建議:如果把“message”里所有的信息都grok到不同的字段了簇搅,數(shù)據(jù)實(shí)質(zhì)上就相當(dāng)于是重復(fù)存儲(chǔ)了兩份。所以可以用remove_field參數(shù)來(lái)刪除掉message字段软吐,或者用overwrite參數(shù)來(lái)重寫(xiě)默認(rèn)的message字段瘩将,只保留最重要的部分。

filter {

grok {

patterns_dir =>"/path/to/your/own/patterns"

match => {

"message" =>"%{SYSLOGBASE} %{DATA:message}"

}

overwrite => ["message"]

}

}

filter {

grok {

match => ["message", "%{HTTPDATE:logdate}"]

remove_field =>["logdate"]

}

}

Logstash內(nèi)置正則文件:

/home/logstash-5.2.1/vendor/bundle/jruby/1.9/gems/logstash-patterns-core-4.0.2/patterns/grok-patterns

可以在此文件中進(jìn)行添加項(xiàng)凹耙;

覆蓋-- overwrite

使用Grok的overwrite參數(shù)也可以覆蓋日志中的信息

filter {

grok {

match =>{ "message" => "%{SYSLOGBASE} %{DATA:message}" }

overwrite=> [ "message" ]

}

}

日志中的message字段將會(huì)被覆蓋

2.3kv

將數(shù)據(jù)源轉(zhuǎn)換成鍵值對(duì)姿现,并創(chuàng)建相對(duì)的field。比如傳入“a=111&b=2222&c=3333”肖抱,輸出的時(shí)候备典,a,b意述,c會(huì)被創(chuàng)建成三個(gè)field提佣,這樣做的好處是,當(dāng)需要查詢某一個(gè)參數(shù)的時(shí)候可直接查詢荤崇,而不是把一個(gè)字符串搜索出來(lái)再做解析拌屏。

kv {

source => "field_name"

field_split => "&?"

}

2.4 IP位置插件GeoIP(地址查詢歸類)--(態(tài)勢(shì)感知項(xiàng)目中攻擊數(shù)據(jù)IP轉(zhuǎn)換可用)

GeoIP是最常見(jiàn)的免費(fèi)IP地址歸類查詢庫(kù),同時(shí)也有收費(fèi)版可以采購(gòu)术荤。GeoIP庫(kù)可以根據(jù)IP地址提供對(duì)應(yīng)的地域信息倚喂,包括國(guó)別,省市瓣戚,經(jīng)緯度等端圈,對(duì)于可視化地圖和區(qū)域統(tǒng)計(jì)非常有用。

使用方法:

filter {

geoip{

source =>"clientip"

database =>"/etc/logstash/GeoLiteCity.dat"#需去官網(wǎng)下載ip庫(kù)放到本地

}

}

示例:

filter {

geoip {

source =>"message"#如果能聯(lián)網(wǎng)可查詢?cè)诰€ip庫(kù)

}

}

運(yùn)行結(jié)果:

{

"message"=> "183.60.92.253",

"@version"=> "1",

"@timestamp"=> "2014-08-07T10:32:55.610Z",

"host"=> "raochenlindeMacBook-Air.local",

"geoip"=> {

"ip"=> "183.60.92.253",

"country_code2"=> "CN",

"country_code3"=> "CHN",

"country_name"=> "China",

"continent_code"=> "AS",

"region_name"=> "30",

"city_name"=> "Guangzhou",

"latitude"=> 23.11670000000001,

"longitude"=> 113.25,

"timezone"=> "Asia/Chongqing",

"real_region_name"=> "Guangdong",

"location"=> [

[0]113.25,

[1]23.11670000000001

]

}

}

注:geoip插件的“source”字段可以是任一處理后的字段子库,比如“clientip”枫笛,但是字段內(nèi)容卻需要小心!geoip庫(kù)內(nèi)只存有公共網(wǎng)絡(luò)上的IP信息刚照,查詢不到結(jié)果的刑巧,會(huì)直接返回null喧兄,而logstash的geoip插件對(duì)null結(jié)果的處理是:不生成對(duì)應(yīng)的geoip.字段。

所以在測(cè)試時(shí)啊楚,如果使用了諸如127.0.0.1, 172.16.0.1,

182.168.0.1, 10.0.0.1等內(nèi)網(wǎng)地址吠冤,會(huì)發(fā)現(xiàn)沒(méi)有對(duì)應(yīng)輸出!

GeoIP庫(kù)數(shù)據(jù)較多恭理,如果不需要這么多內(nèi)容拯辙,可以通過(guò)fields選項(xiàng)指定自己所需要的。下例為全部可選內(nèi)容:

filter {

geoip {

fields => ["city_name","continent_code","country_code2","country_code3","country_name","dma_code","ip","latitude","longitude","postal_code","region_name","timezone"]

}

}

選項(xiàng)

上面我們看到了source和fields兩個(gè)選項(xiàng)颜价,geoip還提供了下列選項(xiàng):

2.5 drop

drop可以跳過(guò)某些不想統(tǒng)計(jì)的日志信息涯保,當(dāng)某條日志信息符合if規(guī)則時(shí),該條信息則不會(huì)在out中出現(xiàn)周伦,logstash將直接進(jìn)行下一條日志的解析夕春。

if [field_name] == "value" {

drop {}

}

2.6重命名-- rename

對(duì)于已經(jīng)存在的字段,重命名其字段名稱

filter {

mutate {

rename => ["syslog_host", "host"]

}

}

2.7更新字段內(nèi)容– update

更新字段內(nèi)容专挪,如果字段不存在及志,不會(huì)新建

filter{

mutate {

update =>{ "sample" => "My new message" }

}

}

2.8替換字段內(nèi)容– replace

與update功能相同,區(qū)別在于如果字段不存在則會(huì)新建字段

filter {

mutate {

replace => { "message" =>"%{source_host}: My new message" }

}

}

2.9數(shù)據(jù)類型轉(zhuǎn)換– convert

filter{

mutate {

convert =>["request_time", "float"]

}

}

2.10文本替換– gsub

gsub提供了通過(guò)正則表達(dá)式實(shí)現(xiàn)文本替換的功能

filter {

mutate {

gsub => [

# replace all forward slashes with underscore

"fieldname","/", "_",

# replace backslashes, question marks, hashes, andminuses

#with a dot "."

"fieldname2","[\\?#-]", "."

]

}

}

2.11大小寫(xiě)轉(zhuǎn)換-- uppercase寨腔、lowercase

filter {

mutate {

uppercase => ["fieldname" ]

}

}

2.12去除空白字符-- strip

類似php中的trim速侈,只去除首尾的空白字符

filter {

mutate{

strip=> ["field1", "field2"]

}

}

2.13刪除字段-- remove、remove_field

remove不推薦使用迫卢,推薦使用remove_field

filter {

mutate{

remove_field=> [ "foo_%{somefield}" ]

}

}

2.14分割字段– split

將提取到的某個(gè)字段按照某個(gè)字符分割

filter {

mutate {

split => ["message","|"]

}

}

針對(duì)字符串"123|321|adfd|dfjld*=123"倚搬,可以看到輸出結(jié)果:

{

"message" =>[

[0] "123",

[1] "321",

[2] "adfd",

[3]"dfjld*=123"

],

"@version" =>"1",

"@timestamp"=> "2014-08-20T15:58:23.120Z",

"host" =>"raochenlindeMacBook-Air.local"

}

2.15聚合數(shù)組– join

將類型為array的字段中的array元素使用指定字符為分隔符聚合成一個(gè)字符串

如我們可以將split分割的結(jié)果再重新聚合起來(lái):

filter {

mutate {

split =>["message", "|"]

}

mutate {

join =>["message", ","]

}

}

輸出:

{

"message" =>"123,321,adfd,dfjld*=123",

"@version" =>"1",

"@timestamp"=> "2014-08-20T16:01:33.972Z",

"host" =>"raochenlindeMacBook-Air.local"

}

2.16合并數(shù)組– merge

對(duì)于幾個(gè)類型為array或hash或string的字段,我們可以使用merge合并

filter {

mutate {

merge => ["dest_field", "added_field" ]

}

}

需要注意的是乾蛤,array和hash兩個(gè)字段是不能merge的

2.17時(shí)間分割– split

mutiline讓logstash將多行數(shù)據(jù)變成一個(gè)事件每界,當(dāng)然了,logstash同樣支持將一行數(shù)據(jù)變成多個(gè)事件

logstash提供了split插件幻捏,用來(lái)把一行數(shù)據(jù)拆分成多個(gè)事件

示例:

filter {

split {

field => "message"

terminator => "#"

}

}

運(yùn)行結(jié)果:

對(duì)于"test1#test2",上述logstash配置將其變成了下面兩個(gè)事件:

{

"@version":"1",

"@timestamp":"2014-11-18T08:11:33.000Z",

"host":"web121.mweibo.tc.sinanode.com",

"message":"test1"

}

{

"@version":"1",

"@timestamp":"2014-11-18T08:11:33.000Z",

"host":"web121.mweibo.tc.sinanode.com",

"message":"test2"

}

需要注意的是命咐,當(dāng)split插件執(zhí)行結(jié)束后篡九,會(huì)直接進(jìn)入output階段,其后的所有filter都將不會(huì)被執(zhí)行

2.18 json

對(duì)于json格式的log醋奠,可以通過(guò)codec的json編碼進(jìn)行解析榛臼,但是如果記錄中只有一部分是json,這時(shí)候就需要在filter中使用json解碼插件

示例:

filter {

json{

source=> "message"

target=> "jsoncontent"

}

}

運(yùn)行結(jié)果:

{

"@version":"1",

"@timestamp":"2014-11-18T08:11:33.000Z",

"host":"web121.mweibo.tc.sinanode.com",

"message":"{\"uid\":3081609001,\"type\":\"signal\"}",

"jsoncontent": {

"uid":3081609001,

"type":"signal"

}

}

上面的例子中窜司,解析結(jié)果被放到了target所指向的節(jié)點(diǎn)下沛善,如果希望將解析結(jié)果與log中其他字段保持在同一層級(jí)輸出,那么只需要去掉target即可:

{

"@version":"1",

"@timestamp":"2014-11-18T08:11:33.000Z",

"host":"web121.mweibo.tc.sinanode.com",

"message":"{\"uid\":3081609001,\"type\":\"signal\"}",

"uid":3081609001,

"type":"signal"

}

3塞祈、output

output {

stdout{ codec=>rubydebug}#直接輸出金刁,調(diào)試用起來(lái)方便

#輸出到redis

redis {

host => '10.120.20.208'

data_type => 'list'

key => '10.99.201.34:access_log_2016-04'

}

#輸出到ES

elasticsearch {

hosts =>"192.168.0.15:9200"

index => "%{sysid}_%{type}"

document_type => "%{daytag}"

}

}

附:

1、Grok正則在線驗(yàn)證http://grokdebug.herokuapp.com/

2、Logstash配置https://my.oschina.net/shawnplaying/blog/670217

3尤蛮、Logstash最佳實(shí)踐http://udn.yyuap.com/doc/logstash-best-practice-cn/index.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末媳友,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子产捞,更是在濱河造成了極大的恐慌醇锚,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,640評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件坯临,死亡現(xiàn)場(chǎng)離奇詭異焊唬,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)看靠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,254評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)赶促,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人衷笋,你說(shuō)我怎么就攤上這事芳杏。” “怎么了辟宗?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,011評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵爵赵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我泊脐,道長(zhǎng)空幻,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,755評(píng)論 1 294
  • 正文 為了忘掉前任容客,我火速辦了婚禮秕铛,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘缩挑。我一直安慰自己但两,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,774評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布供置。 她就那樣靜靜地躺著谨湘,像睡著了一般。 火紅的嫁衣襯著肌膚如雪芥丧。 梳的紋絲不亂的頭發(fā)上紧阔,一...
    開(kāi)封第一講書(shū)人閱讀 51,610評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音续担,去河邊找鬼擅耽。 笑死,一個(gè)胖子當(dāng)著我的面吹牛物遇,可吹牛的內(nèi)容都是我干的乖仇。 我是一名探鬼主播憾儒,決...
    沈念sama閱讀 40,352評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼这敬!你這毒婦竟也來(lái)了航夺?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,257評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤崔涂,失蹤者是張志新(化名)和其女友劉穎阳掐,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體冷蚂,經(jīng)...
    沈念sama閱讀 45,717評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡缭保,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,894評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蝙茶。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片艺骂。...
    茶點(diǎn)故事閱讀 40,021評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖隆夯,靈堂內(nèi)的尸體忽然破棺而出钳恕,到底是詐尸還是另有隱情,我是刑警寧澤蹄衷,帶...
    沈念sama閱讀 35,735評(píng)論 5 346
  • 正文 年R本政府宣布忧额,位于F島的核電站,受9級(jí)特大地震影響愧口,放射性物質(zhì)發(fā)生泄漏睦番。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,354評(píng)論 3 330
  • 文/蒙蒙 一耍属、第九天 我趴在偏房一處隱蔽的房頂上張望托嚣。 院中可真熱鬧,春花似錦厚骗、人聲如沸示启。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,936評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)夫嗓。三九已至,卻和暖如春提揍,著一層夾襖步出監(jiān)牢的瞬間啤月,已是汗流浹背煮仇。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,054評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工劳跃, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人浙垫。 一個(gè)月前我還...
    沈念sama閱讀 48,224評(píng)論 3 371
  • 正文 我出身青樓刨仑,卻偏偏與公主長(zhǎng)得像郑诺,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子杉武,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,974評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理辙诞,服務(wù)發(fā)現(xiàn),斷路器轻抱,智...
    卡卡羅2017閱讀 134,658評(píng)論 18 139
  • 本人陸陸續(xù)續(xù)接觸了ELK的1.4飞涂,2.0,2.4祈搜,5.0较店,5.2版本,可以說(shuō)前面使用當(dāng)中一直沒(méi)有太多感觸容燕,最近使用...
    三杯水Plus閱讀 4,106評(píng)論 0 12
  • 1.grok Description Parse arbitrary text and structure it....
    Zparkle閱讀 7,221評(píng)論 1 1
  • 回首往事梁呈,時(shí)間飛逝,2個(gè)月一晃而過(guò)蘸秘,進(jìn)入不寫(xiě)就出局8班的這段時(shí)間官卡,是該復(fù)盤(pán)一次。 我還是我醋虏,看似沒(méi)有任何變化寻咒,上著...
    根蓮說(shuō)閱讀 324評(píng)論 0 2
  • 親愛(ài)的小P, 多久日子沒(méi)有與你一起出行灰粮?我已經(jīng)記不起仔涩。自從在家里給你找到了屬于你的地盤(pán),自從你爬上了墻粘舟,我們倆再?zèng)]...
    蔡新花閱讀 289評(píng)論 4 2