ELK+filebeat+x-pack平臺(tái)搭建

概要:

ELK允許你以任何格式搜索,分析和可視化從任何源生成的日志绑蔫,這種做法稱為集中式日志記錄运沦。在嘗試識(shí)別服務(wù)器或應(yīng)用程序的問題時(shí),集中日志記錄非常有用配深,因?yàn)樗试S您在一個(gè)位置搜索所有日志携添。它也很有用,因?yàn)樗试S您通過在特定時(shí)間范圍內(nèi)關(guān)聯(lián)其日志來(lái)識(shí)別跨多個(gè)服務(wù)器的問題篓叶。

組件:

Elasticsearch

是一個(gè)基于Apache Lucene(TM)的開源搜索引擎 烈掠,它的特點(diǎn)有:分布式,零配置缸托,自動(dòng)發(fā)現(xiàn)左敌,索引自動(dòng)分片,索引副本機(jī)制嗦董,RESTful web風(fēng)格接口母谎,多數(shù)據(jù)源瘦黑,自動(dòng)搜索負(fù)載等京革。

Logstash

是一個(gè)用來(lái)搜集、分析幸斥、過濾日志的工具匹摇。它支持幾乎任何類型的日志,包括系統(tǒng)日志甲葬、錯(cuò)誤日志和自定義應(yīng)用程序日志廊勃。它可以從許多來(lái)源接收日志,這些來(lái)源包括 syslog、消息傳遞(例如 RabbitMQ)和JMX坡垫,它能夠以多種方式輸出數(shù)據(jù)梭灿,包括電子郵件、websockets和 Elasticsearch冰悠。
雖然filebeat可以將數(shù)據(jù)直接發(fā)送到elasticseaech數(shù)據(jù)庫(kù)堡妒,但我們建議先使用Logstash處理數(shù)據(jù),這將允許從不用的源數(shù)據(jù)收集數(shù)據(jù)溉卓,將其轉(zhuǎn)換為通用格式皮迟,并將其導(dǎo)出到另一個(gè)數(shù)據(jù)庫(kù)。logstash配置文件以json格式編寫桑寨,配置時(shí)伏尼,可以將logstash作為一個(gè)管道,將一端接收數(shù)據(jù)尉尾,以某種方式處理它爆阶,并將數(shù)據(jù)發(fā)送到ES,logstash有兩個(gè)必要的元素代赁,input和output以及一個(gè)可選元素filter

stdin {} 就是從標(biāo)準(zhǔn)輸入 stdout {} 就是從標(biāo)準(zhǔn)輸出
在這個(gè)字符串中扰她,其實(shí)定義了 Logstash 的兩個(gè)行為input和output。
在 input 中芭碍,我們定義了一個(gè)標(biāo)準(zhǔn)輸入徒役,由于什么都沒有,所以 Logstash 會(huì)從終端的標(biāo)準(zhǔn)輸入中讀取字符串窖壕,這也是為什么剛才在輸入完命令后會(huì)出現(xiàn)等待輸入的情況忧勿。
在 output 中,我們定義了一個(gè)標(biāo)準(zhǔn)輸出瞻讽,也就是說(shuō) Logstash 在處理完后會(huì)將結(jié)果從標(biāo)準(zhǔn)輸出(終端)中輸出鸳吸,而 codec 字段,則說(shuō)明了輸出會(huì)遵循什么樣的格式速勇,這里定義的 codec 為 rubydebug晌砾,所以我們剛才看到了一套標(biāo)準(zhǔn)的輸出格式。
logsatsh
filter
grok: 基于正則表達(dá)式提供豐富可重用的模式烦磁,基于此可以將非結(jié)構(gòu)化數(shù)據(jù)轉(zhuǎn)換為結(jié)構(gòu)化數(shù)據(jù)
date: 將字符串類型的時(shí)間字段轉(zhuǎn)換為時(shí)間戳類型的养匈,方便后續(xù)數(shù)處理
Mutate:進(jìn)行增刪改查替換相關(guān)字段
logstash:位于ELK數(shù)據(jù)管道的最前端,其作用主要是收集都伪,過濾呕乎,分析,輸出各種結(jié)構(gòu)化或者非結(jié)構(gòu)化的原始數(shù)據(jù)(典型的如日志系統(tǒng))陨晶,原始數(shù)據(jù)從“無(wú)序變成有序”的重?fù)?dān)就落在了logstash的肩上了猬仁,因此其作用舉足輕重。
說(shuō)到Logstash,不得不說(shuō)其中的 插件機(jī)制湿刽,其幾乎所有的功能都是靠插件來(lái)實(shí)現(xiàn)的的烁,因此靈活易用:
關(guān)于 數(shù)據(jù)收集,Logstash 提供了輸入插件來(lái)支持各種不同的數(shù)據(jù)源
關(guān)于 數(shù)據(jù)分析诈闺,Logstash 則提供了過濾器插件來(lái)支持對(duì)輸入原始數(shù)據(jù)的花式處理
關(guān)于 數(shù)據(jù)輸出撮躁,Logstash 也提供了各種輸出插件,從而支持將結(jié)果數(shù)據(jù)輸出到各種地方买雾,比如標(biāo)準(zhǔn)控制臺(tái)把曼,文件,各種數(shù)據(jù)庫(kù)包括 ElasticSearch 等

Logstash其實(shí)在整個(gè)ELK中環(huán)節(jié)還蠻重要的漓穿,其實(shí)可以理解為一個(gè)“中間人”的角色嗤军。它通過從filebeat中接受數(shù)據(jù),然后進(jìn)行過濾晃危,最后再傳輸給es叙赚。所以一般logstash的配置也包括input,output以及filter的配置。

logstash理解參考>>
https://segmentfault.com/a/1190000015754162

Kibana

是一個(gè)基于Web的圖形界面僚饭,用于搜索震叮、分析和可視化存儲(chǔ)在 Elasticsearch指標(biāo)中的日志數(shù)據(jù)。它利用Elasticsearch的REST接口來(lái)檢索數(shù)據(jù)鳍鸵,不僅允許用戶創(chuàng)建他們自己的數(shù)據(jù)的定制儀表板視圖苇瓣,還允許他們以特殊的方式查詢和過濾數(shù)據(jù)。

filebeat

輕量級(jí)偿乖,單用途的數(shù)據(jù)發(fā)送器击罪,可以將數(shù)百或數(shù)千臺(tái)計(jì)算機(jī)的數(shù)據(jù)發(fā)送到logstash或elasticsearch
beats
filebeat 日志文件(yaml)
處理流程:輸入input 處理filter 輸出output

x-pack

X-Pack是一個(gè)Elastic Stack的擴(kuò)展,將安全贪薪,警報(bào)媳禁,監(jiān)視,報(bào)告和圖形功能包含在一個(gè)易于安裝的軟件包中
X-Pack 提供以下幾個(gè)級(jí)別保護(hù)elastic集群
1)用戶驗(yàn)證
2)授權(quán)和基于角色的訪問控制
3)節(jié)點(diǎn)/客戶端認(rèn)證和信道加密
4)審計(jì)
通俗講解:
安全防護(hù)功能:你是不是画切,不想別人直接訪問你的5601竣稽,9200端口,這個(gè)霍弹,x-pack能辦到毫别。
實(shí)時(shí)監(jiān)控功能:實(shí)時(shí)監(jiān)控集群的CPU、磁盤等負(fù)載庞萍;
生成報(bào)告功能:圖形化展示你的集群使用情況拧烦。
還有忘闻,機(jī)器學(xué)習(xí)等功能钝计。
X-Pack 已經(jīng)作為 Elastic 公司單獨(dú)的產(chǎn)品線,前身是 Shield, Watcher, Marvel, Graph, 和 reporting,先來(lái)說(shuō)說(shuō)這幾個(gè)爸爸是做什么的吧:

  • Shield: 提供對(duì)數(shù)據(jù)的 Password-Protect私恬,以及加密通信债沮、基于角色的權(quán)限控制,IP 過濾本鸣,審計(jì)疫衩,可以有效地:
  • 防止未授權(quán)的訪問:基于 Password-Protect,基于角色的權(quán)限控制荣德,IP過濾闷煤;
  • 保證數(shù)據(jù)的完整性:基于消息認(rèn)證和 TLS/SSL 加密;
  • 審計(jì)跟蹤:可以知道誰(shuí)在什么時(shí)候?qū)?shù)據(jù)做了什么涮瞻;
  • Watcher: 提供對(duì)數(shù)據(jù)操作的變更的監(jiān)控和報(bào)警鲤拿。
  • Marvel: 基于 Kibana 的插件,主要用于監(jiān)控 ES 集群署咽〗辏可以看到集群的健康狀況、實(shí)時(shí)的性能指標(biāo)宁否,分析歷史集群窒升、索引、節(jié)點(diǎn)的指標(biāo)等慕匠。
  • Graph: 用于分析數(shù)據(jù)間的關(guān)系饱须。
  • Reporting: 用于快速生成 Kibana Visualization 和 Dashboard 的報(bào)表,可以對(duì)生成的時(shí)間定制計(jì)劃台谊,并且可以由某些特定條件觸發(fā)冤寿。

再來(lái)看看我們的兒子 X-Pack 是做啥的,哦青伤,他就是他們的兒子督怜,一個(gè)大合集,便于安裝狠角、不用為版本兼容性犯愁号杠,可以靈活 disable / enable 其中的各個(gè)組件。他還多干了一件事兒丰歌,可以監(jiān)控 Logstash姨蟋。

關(guān)于免費(fèi)和收費(fèi)版本,版本功能比較可以查看:https://www.elastic.co/subscriptions

免費(fèi)版本注冊(cè)地址:https://register.elastic.co/xpack_register

付費(fèi)版本(分為黃金立帖、白金級(jí)別)購(gòu)買地址:https://www.elastic.co/subscriptions/xpack

默認(rèn)的免費(fèi)版本有一個(gè)月的 trial 試用期眼溶。免費(fèi)版本試用期只包含 ES 集群監(jiān)控、圖分析和可視化晓勇,基于角色的 ES 權(quán)限控制和搜索用戶信息的功能堂飞。不包含:

  • 安全組件 Shield:
    • TLS/SSL加密灌旧;
    • LDAP的整合;
    • 日志審計(jì)绰筛;
    • 第三方的認(rèn)證域整合枢泰;
  • 報(bào)警組件 Watcher;
  • 報(bào)表組件 Reporting铝噩;

總的來(lái)說(shuō)免費(fèi)版本對(duì)于安全組件這塊什么都不支持衡蚂。

參考:http://www.reibang.com/p/a49d93212eca
x-pack尚處于付費(fèi)版本,適用期限:1個(gè)月

應(yīng)用場(chǎng)景

在傳統(tǒng)的應(yīng)用運(yùn)行環(huán)境中骏庸,收集毛甲、分析日志往往是非常必要且常見的,一旦應(yīng)用出現(xiàn)問題具被、或者需要分析應(yīng)用行為時(shí)丽啡,管理員將通過一些傳統(tǒng)工具對(duì)日志進(jìn)行檢查,如cat硬猫、tail补箍、sed、awk啸蜜、perl以及grep坑雅。這種做法有助于培養(yǎng)在常用工具方面的優(yōu)秀技能,但它的適用范圍僅限于少量的主機(jī)和日志文件類型衬横。

隨著應(yīng)用系統(tǒng)的復(fù)雜性與日俱增裹粤,日志的分析也越來(lái)越重要,常見的需求包括蜂林,團(tuán)隊(duì)開發(fā)過程中可能遇到一些和日志有關(guān)的問題:

開發(fā)沒有生產(chǎn)環(huán)境服務(wù)器權(quán)限遥诉,需要通過系統(tǒng)管理員獲取詳細(xì)日志,溝通成本高
系統(tǒng)可能是有多個(gè)不同語(yǔ)言編寫噪叙、分布式環(huán)境下的模塊組成矮锈,查找日志費(fèi)時(shí)費(fèi)力
日志數(shù)量巨大,查詢時(shí)間很長(zhǎng)

es歷史數(shù)據(jù)處理:
hadoop集群睁蕾,把歷史日志都放在hadoop集群上苞笨,直接寫一個(gè)mapreduce想查所長(zhǎng)時(shí)間就查多長(zhǎng)時(shí)間的
elk可以實(shí)現(xiàn)但是對(duì)于超過半年的索引會(huì)關(guān)閉掉,為了查詢效率

ELK流程圖

image.png

調(diào)研了ELK技術(shù)棧子眶,發(fā)現(xiàn)新一代的logstash-forward即Filebeat瀑凝,使用了golang,性能超logstash臭杰,部署簡(jiǎn)單粤咪,占用資源少,可以很方便的和logstash和ES對(duì)接渴杆,作為日志文件采集組件寥枝。所以決定使用ELK+Filebeat的架構(gòu)進(jìn)行平臺(tái)搭建宪塔。Filebeat是Beats家族的一員,后續(xù)可以使用Packetbeat進(jìn)行網(wǎng)絡(luò)數(shù)據(jù)采集脉顿、Winlogbeat進(jìn)行Windosw事件采集、Heartbeat進(jìn)行心跳采集点寥、Metricbeat進(jìn)行系統(tǒng)指標(biāo)采集艾疟。這種架構(gòu)解決了 Logstash 在各服務(wù)器節(jié)點(diǎn)上占用系統(tǒng)資源高的問題。相比 Logstash敢辩,Beats 所占系統(tǒng)的 CPU 和內(nèi)存幾乎可以忽略不計(jì)蔽莱。另外,Beats 和 Logstash 之間支持 SSL/TLS 加密傳輸戚长,客戶端和服務(wù)器雙向認(rèn)證盗冷,保證了通信安全。

各組件承擔(dān)的角色和功能:
Elasticsearch:分布式搜索和分析引擎同廉,具有高可伸縮仪糖、高可靠和易管理等特點(diǎn)∑刃ぃ基于 Apache Lucene 構(gòu)建锅劝,能對(duì)大容量的數(shù)據(jù)進(jìn)行接近實(shí)時(shí)的存儲(chǔ)、搜索和分析操作蟆湖。通常被用作某些應(yīng)用的基礎(chǔ)搜索引擎故爵,使其具有復(fù)雜的搜索功能;
Logstash:數(shù)據(jù)處理引擎隅津,它支持動(dòng)態(tài)的從各種數(shù)據(jù)源搜集數(shù)據(jù)诬垂,并對(duì)數(shù)據(jù)進(jìn)行過濾、分析伦仍、豐富结窘、統(tǒng)一格式等操作,然后存儲(chǔ)到 ES充蓝;
Kibana:數(shù)據(jù)分析和可視化平臺(tái)晦鞋。與 Elasticsearch 配合使用,對(duì)數(shù)據(jù)進(jìn)行搜索棺克、分析和以統(tǒng)計(jì)圖表的方式展示悠垛;
Filebeat:ELK 協(xié)議棧的新成員,一個(gè)輕量級(jí)開源日志文件數(shù)據(jù)搜集器娜谊,使用 golang 基于 Logstash-Forwarder 源代碼開發(fā)确买,是對(duì)它的替代。在需要采集日志數(shù)據(jù)的 server 上安裝 Filebeat纱皆,并指定日志目錄或日志文件后湾趾,F(xiàn)ilebeat 就能讀取數(shù)據(jù)芭商,迅速發(fā)送到 Logstash 進(jìn)行解析。

1.準(zhǔn)備工作

環(huán)境

Linux:Centos7.2
ElasticSearch : elasticsearch-6.7.0
Logstash : logstash-6.7.0
kibana:kibana-6.7.0
JDK: 1.8

占用端口

elasticsearch 9200/9300 它跟其他的節(jié)點(diǎn)的傳輸端口為9300搀缠,接受HTTP請(qǐng)求的端口為9200
logstash 9600/5044 5044接收beat數(shù)據(jù)的端口铛楣,9600是logstash API端口
kibana 5601

官網(wǎng)下載:

https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.7.0.tar.gz
https://artifacts.elastic.co/downloads/kibana/kibana-6.7.0-linux-x86_64.tar.gz
https://artifacts.elastic.co/downloads/logstash/logstash-6.7.0.tar.gz
https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.7.0-linux-x86_64.tar.gz

注意點(diǎn):
  • 安裝Elastic Stack組件需要使用相同的版本
  • elasticsearch的配置文件采用YAML格式,這意味著縮進(jìn)非常重要艺普,編輯文件時(shí)簸州,確保不添加任何額外的空格

2.系統(tǒng)配置

創(chuàng)建sudo權(quán)限用戶
[root@elk ~]# useradd -d /elk elk
[root@elk ~]# username=elk
[root@elk ~]# echo "$username ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers.d/$
操作系統(tǒng)配置

禁用linux

[root@elk ~]#vi /etc/sysconfig/selinux 
將SELINUX=enforcing修改為SELINUX=disabled

安裝jdk1.8

請(qǐng)參考之前博客http://www.reibang.com/p/1b2b00ceef88

selinux設(shè)置

====操作系統(tǒng)優(yōu)化設(shè)置====
[elk@elk config]$ sudo vim /etc/security/limits.conf 
* soft nproc 65535
[elk@elk config]$ sudo vim /etc/security/limits.d/20-nproc.conf
* soft nproc 65535

系統(tǒng)參數(shù)配置

[elk@elk config]$ sudo vim /etc/sysctl.conf
fs.file-max=655350
vm.max_map_count=655360
[elk@elk config]$ sudo sysctl -p

防火墻設(shè)置

//臨時(shí)關(guān)閉
systemctl stop firewalld
//禁止開機(jī)啟動(dòng)
systemctl disable firewalld

3.Elasticsearch安裝

安裝

[elk@elk ~]$ tar -xzf elasticsearch-6.7.0.tar.gz
[elk@elk config]$ cd /elk/elasticsearch-6.7.0/config

es單節(jié)點(diǎn)
修改elasticsearch.yml配置文件

[elk@elk config]$ vim elasticsearch.yml
==設(shè)置集群名稱==
17 cluster.name: wp_seclog
==設(shè)置節(jié)點(diǎn)名稱==
23 node.name: ELK-node1
==設(shè)置數(shù)據(jù)存儲(chǔ)路徑==
34 path.data: /elk/data
==設(shè)置日志存儲(chǔ)路徑==
38 path.logs: /elk/data/logs
#集群設(shè)置==綁定IP地址==
#56 network.host: 0.0.0.0
==綁定端口==
60 http.port: 9200
==集群IP集合== #也可以添加端口
69 discovery.zen.ping.unicast.hosts: ["192.168.100.203"]
# 集群設(shè)置:多節(jié)點(diǎn)
#69 discovery.zen.ping.unicast.hosts: ["192.168.100.203","hosts2","host3"]

es集群多節(jié)點(diǎn)
已經(jīng)安裝好單個(gè)節(jié)點(diǎn),添加多節(jié)點(diǎn)時(shí)歧譬,只需要將es安裝包復(fù)制到相應(yīng)的機(jī)器上岸浑,需要配置集群中的另外節(jié)點(diǎn)es-2 和 es-3.配置同es-1,修改一下配置文件里的節(jié)點(diǎn)名和地址即可
如果是集群使用x-pack需要為內(nèi)部節(jié)點(diǎn)通信配置TSL/SSL

參考:es內(nèi)部節(jié)點(diǎn)安全認(rèn)證

image.png
集群內(nèi)部證書配置(詳細(xì)可參考上面連接->es內(nèi)部節(jié)點(diǎn)安全認(rèn)證)
cd /elk/elasticsearch-6.7.0
#創(chuàng)建TSL/SSL證書
bin/elasticsearch-certutil ca
bin/elasticsearch-certutil cert --ca config/certs/elastic-stack-ca.p12 --dns 192.168.100.203 --ip 192.168.100.203
##創(chuàng)建cert文件夾
[elk@elk config]$ mkdir -p /elk/elasticsearch-6.7.0/config/certs   
[elk@elk config]$ ls -al /elk/elasticsearch-6.7.0/config/certs
-rw------- 1 elk elk 3443 6月  20 10:07 elastic-certificates.p12

注意:如果安裝了x-pack但是不配置內(nèi)部安全通信認(rèn)證瑰步,集群不可用
集群配置
wp-node1

[elk@elk elasticsearch-6.7.0]$ egrep -v '^$|#' config/elasticsearch.yml
cluster.name: wupao
node.name: wp-node1
node.master: true
path.data: /elk/elasticsearch-6.7.0/data
path.logs: /elk/elasticsearch-6.7.0/logs
bootstrap.system_call_filter: false
network.host: 0.0.0.0
transport.tcp.compress: true
http.port: 9200
discovery.zen.ping.unicast.hosts: ["192.168.100.203", "192.168.100.202","192.168.100.201"]
discovery.zen.minimum_master_nodes: 2
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: certs/elastic-certificates.p12 
xpack.security.transport.ssl.truststore.path: certs/elastic-certificates.p12 

wp-node2

-bash-4.2$ egrep -v '^$|#' config/elasticsearch.yml
cluster.name: wupao
node.name: wp-node2
node.master: true
path.data: /elk/elasticsearch-6.7.0/data
path.logs: /elk/elasticsearch-6.7.0/logs
bootstrap.system_call_filter: false
network.host: 0.0.0.0
transport.tcp.compress: true
http.port: 9200
discovery.zen.ping.unicast.hosts: ["192.168.100.203", "192.168.100.202","192.168.100.201"]
discovery.zen.minimum_master_nodes: 2
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: certs/elastic-certificates.p12 
xpack.security.transport.ssl.truststore.path: certs/elastic-certificates.p12

wp-node3

-bash-4.2$ egrep -v '^$|#' config/elasticsearch.yml
cluster.name: wupao
node.name: wp-node3
node.master: false 
path.data: /elk/elasticsearch-6.7.0/data
path.logs: /elk/elasticsearch-6.7.0/logs
bootstrap.system_call_filter: false
network.host: 0.0.0.0
transport.tcp.compress: true
http.port: 9200
discovery.zen.ping.unicast.hosts: ["192.168.100.203", "192.168.100.202","192.168.100.201"]
discovery.zen.minimum_master_nodes: 2
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: certs/elastic-certificates.p12 
xpack.security.transport.ssl.truststore.path: certs/elastic-certificates.p12

注意:
node.master: false ##注意discovery.zen.minimum_master_nodes: 2 為2兩個(gè)為true矢洲,為1一個(gè)為true
discovery.zen.minimum_master_nodes: 2 ##這個(gè)的參數(shù)為節(jié)點(diǎn)數(shù)N/2+1,因?yàn)槲夷壳暗墓?jié)點(diǎn)是個(gè),所以為2缩焦、所以為2個(gè)節(jié)點(diǎn)填寫為1
node3添加到集群后读虏,node-master日志中會(huì)顯示


image.png

報(bào)錯(cuò)解決
報(bào)錯(cuò)1:因?yàn)閯傞_始是一個(gè)節(jié)點(diǎn),后增加了兩個(gè)節(jié)點(diǎn)做集群袁滥,添加的方法是直接copy之前的包到新的服務(wù)器上
剛開始遇到無(wú)法添加集群的報(bào)錯(cuò):

[wp-node2] failed to send join request to master [{wp-node1}{MxvGfK7lR6iI_frh_BOzcg}{M_VIMWHFSPmZT9n2D2_fZQ}{192.168.1.203}{192.168.1.203:9300}{ml.machine_memory=16603000832, ml.max_open_jobs=20, xpack.installed=true, ml.enabled=true}], reason [RemoteTransportException[[wp-node1][192.168.1.203:9300][internal:discovery/zen/join]]; nested: IllegalArgumentException[can't add node {wp-node2}{MxvGfK7lR6iI_frh_BOzcg}{gO2EuagySwq9d5AfDTK6qg}{192.168.1.202}{192.168.1.202:9300}{ml.machine_memory=12411887616, ml.max_open_jobs=20, xpack.installed=true, ml.enabled=true}, found existing node } with the same id but is a different node instance]; ]

ith the same id but is a different node instance是因?yàn)閺?fù)制虛擬機(jī)時(shí)掘譬,elsticsearch時(shí),將elsticsearch文件夾下的data文件夾一并復(fù)制了呻拌。而在前面測(cè)試時(shí)葱轩,data文件夾下已經(jīng)產(chǎn)生了data數(shù)據(jù),于是報(bào)上面的錯(cuò)誤
解決辦法:刪除elsticsearch文件夾下的data文件夾下的節(jié)點(diǎn)數(shù)據(jù)
報(bào)錯(cuò)2:elasticsearch集群搭建報(bào)錯(cuò):

 not enough master nodes discovered during pinging

解決2:
原因是node.master: true 和discovery.zen.minimum_master_nodes: 2 的數(shù)量不匹配藐握,如果為2需要兩個(gè)幾點(diǎn)配置node.master: true

修改jvm.options配置文件

[elk@elk config]$ vim jvm.options
====修改jvm內(nèi)存值====
 #按照主機(jī)的內(nèi)存50%進(jìn)行設(shè)置靴拱,默認(rèn)es6.3.2為1g
-Xms2g
-Xmx2g

啟動(dòng)

[elk@elk bin]$ ./elasticsearch -d
==查看log信息,檢查es啟動(dòng)是否正常==
[elk@elk logs]$ tail -f /elk/data/logs/
顯示如下猾普,表示啟動(dòng)成功
[2019-03-28T14:17:00,452][INFO ][o.e.n.Node               ] [HCU8cIa] started
[2019-03-28T14:17:00,457][INFO ][o.e.g.GatewayService     ] [HCU8cIa] recovered [0] indices into cluster_state

關(guān)閉

直接殺掉進(jìn)程
[elk@elk ~]$ jps
18438 Elasticsearch
18566 Jps
[elk@elk ~]$ kill -9 18328

啟動(dòng)報(bào)錯(cuò)處理

報(bào)錯(cuò):
[2019-03-28T09:38:45,704][ERROR][o.e.b.Bootstrap          ] [secnode-1] node validation exception
[1] bootstrap checks failed
[1]: max file descriptors [35536] for elasticsearch process is too low, increase to at least [65536]
解決:修改最大連接數(shù)袜炕,剛開始我修改了沒生效,重啟機(jī)器后生效

查看端口

[elk@elk ~]$ ss -ltnp              
LISTEN     0      128                      :::9200                                 :::*                   users:(("java",pid=18438,fd=488))
LISTEN     0      128                      :::9300                                 :::*                   users:(("java",pid=18438,fd=374))

驗(yàn)證

[elk@elk bin]$ curl 192.168.100.203:9200

健康狀態(tài)

[elk@elk ~]$ curl -X GET http://192.168.100.203:9200/_cat/health?v
epoch      timestamp cluster   status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
1553766910 09:55:10  wp-seclog green           1         1      0   0    0    0        0             0                  -                100.0%

注意:

1 network.host: 0.0.0.0 只要不是localhost就是生產(chǎn)模式
2 http://192.168.100.203:9200/_cat/nodes?v   查看集群狀態(tài)

Chrome擴(kuò)展程序


image.png

安裝完成后打開瀏覽器


image.png

安裝完集群后顯示為
image.png

4.logstash安裝

解壓

[elk@elk bin]$tar -xzf logstash-6.7.0.tar.gz
[elk@elk bin]$ cd /elk/logstash-6.7.0/bin/

測(cè)試

進(jìn)行數(shù)據(jù)測(cè)試初家,啟動(dòng)完成后輸入hello 看能否正常輸出
[elk@elk bin]$ ./logstash -e 'input { stdin{} } output { stdout{ codec => rubydebug} }'          
hello
Sending Logstash's logs to /elk/logstash-6.7.0/logs which is now configured via log4j2.properties
[2019-03-28T14:38:25,111][INFO ][logstash.modules.scaffold] Initializing module {:module_name=>"fb_apache", :directory=>"/elk/logstash-6.7.0/modules/fb_apache/configuration"}
[2019-03-28T14:38:25,129][INFO ][logstash.modules.scaffold] Initializing module {:module_name=>"netflow", :directory=>"/elk/logstash-6.7.0/modules/netflow/configuration"}
[2019-03-28T14:38:25,334][INFO ][logstash.setting.writabledirectory] Creating directory {:setting=>"path.queue", :path=>"/elk/logstash-6.7.0/data/queue"}
[2019-03-28T14:38:25,340][INFO ][logstash.setting.writabledirectory] Creating directory {:setting=>"path.dead_letter_queue", :path=>"/elk/logstash-6.7.0/data/dead_letter_queue"}
[2019-03-28T14:38:25,811][WARN ][logstash.config.source.multilocal] Ignoring the 'pipelines.yml' file because modules or command line options are specified
[2019-03-28T14:38:25,850][INFO ][logstash.agent           ] No persistent UUID file found. Generating new UUID {:uuid=>"780df64b-8158-495f-a366-8e4bdbff21c7", :path=>"/elk/logstash-6.7.0/data/uuid"}
[2019-03-28T14:38:26,455][INFO ][logstash.runner          ] Starting Logstash {"logstash.version"=>"6.7.0"}
[2019-03-28T14:38:26,949][INFO ][logstash.agent           ] Successfully started Logstash API endpoint {:port=>9600}
[2019-03-28T14:38:29,594][INFO ][logstash.pipeline        ] Starting pipeline {:pipeline_id=>"main", "pipeline.workers"=>32, "pipeline.batch.size"=>125, "pipeline.batch.delay"=>50}
[2019-03-28T14:38:29,742][INFO ][logstash.pipeline        ] Pipeline started successfully {:pipeline_id=>"main", :thread=>"#<Thread:0xd7dc89c run>"}
The stdin plugin is now waiting for input:
[2019-03-28T14:38:29,834][INFO ][logstash.agent           ] Pipelines running {:count=>1, :pipelines=>["main"]}
{
      "@version" => "1",
    "@timestamp" => 2019-03-28T06:38:29.828Z,
          "host" => "elk",
       "message" => "hello"
}

配置conf文件偎窘,將數(shù)據(jù)傳送到ES

[elk@elk config]$ cd /elk/logstash-6.7.0/config/
vim logstash-simple.conf(創(chuàng)建logstash的配置文件,6.7.0版本無(wú)此文件需自行創(chuàng)建)
input { stdin { } }
output 
{
      elasticsearch { hosts => ["192.168.100.203:9200"] }
      stdout { codec => rubydebug }
}

啟動(dòng)

[elk@elk config]$ cd /elk/logstash-6.7.0/bin/
[elk@elk bin]$ nohup ./bin/logstash -f config/logstash.conf >/dev/null 2>&1 &

查看日志

[elk@elk logs]$ cd /elk/logstash-6.7.0/logs
[elk@elk logs]$ tail -f  less logstash-plain.log 

端口

[root@elk /]# ss -ltnp
LISTEN     0      50               ::ffff:127.0.0.1:9600                                       :::*                   users:(("java",pid=18987,fd=88))

配置示例:

[elk@elk config]$ cat logstash.conf 
# Sample Logstash configuration for creating a simple
# Beats -> Logstash -> Elasticsearch pipeline.

input {
    beats {
        port => 5044
   }
}

output{
    if [fields][env] == "wiki"{                                 
        stdout {codec => rubydebug}
        elasticsearch {
           hosts => "192.168.100.203:9200"
           manage_template => false
           index => "wiki-%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
           document_type => "%{[@metadata][type]}"
       }
 
     }
 
    if [fields][env] == "jira"{                            
        stdout {codec => rubydebug}
        elasticsearch {
           hosts => "192.168.100.203:9200"
           manage_template => false
           index => "jira-%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
           document_type => "%{[@metadata][type]}"
       }
    }

    if [fields][env] == "fisheye"{                            
        stdout {codec => rubydebug}
        elasticsearch {
           hosts => "192.168.100.203:9200"
           manage_template => false
           index => "fisheye-%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
           document_type => "%{[@metadata][type]}"
       }
    }

    if [fields][env] == "crowd"{                            
        stdout {codec => rubydebug}
        elasticsearch {
           hosts => "192.168.100.203:9200"
           manage_template => false
           index => "crowd-%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
           document_type => "%{[@metadata][type]}"
       }
    }

    if [fields][env] == "jenkins"{                            
        stdout {codec => rubydebug}
        elasticsearch {
           hosts => "192.168.100.203:9200"
           manage_template => false
           index => "jenkins-%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
           document_type => "%{[@metadata][type]}"
       }
    }
}
[elk@elk config]$ pwd
/elk/logstash-6.7.0/config

5.kibana安裝

解壓

[elk@elk ~]$ tar -xzf kibana-6.7.0-linux-x86_64.tar.gz
[elk@elk ~]$ mv kibana-6.7.0-linux-x86_64 kibana-6.7.0

修改配置文件

[elk@elk kibana-6.7.0]$ cd /elk/kibana-6.7.0/config/
[elk@elk config]$ vim kibana.yml
 2 server.port: 5601
 #kibana IP
 7 server.host: "192.168.100.203"
 #es ip
 28 elasticsearch.url: "http://192.168.100.203:9200"
 elasticsearch.username: "kibana"
 elasticsearch.password: "xxxxxx"

啟動(dòng)

nohup /elk/kibana-6.7.0/bin/kibana > /dev/null 2>&1 &

端口

[root@elk /]# ss -ltnp
LISTEN     0      128                                                         192.168.1.203:5601                                                                                *:*  

相關(guān)術(shù)語(yǔ)

kibana
discover:數(shù)據(jù)搜索查看
visualize:圖標(biāo)制作
dashboard:儀表盤制作
timelion:時(shí)序數(shù)據(jù)的高級(jí)可視化分析
devtools:開發(fā)者工具

術(shù)語(yǔ)
document:文檔數(shù)據(jù)
index:索引
type:索引中的數(shù)據(jù)類型
field字段:文檔的屬性
query dsl:查詢語(yǔ)言

es CRUD
create:創(chuàng)建文檔
read:讀取文檔
update:更新文檔
delete:刪除文檔
kibana->開發(fā)工具-創(chuàng)建
GET _search
{
  "query": {
    "match_all": {}
  }
}

##create
POST /accounts/persion/1
{
  "name":"daisy",
  "lastname":"Doe",
  "jobdescription":"Systens"
}
#read
GET accounts/persion/1
#update
POST /accounts/persion/1/_update
{
  "doc":{
    "jobdescription":"Linux"
  }
}
#delete
DELETE accounts/persion/1

#query string查詢方式1
Get /accounts/persion/_search?q=daisy

#query DSL 查詢方式2
GET accounts/persion/_search
{
  "query":{
    "term":{
      "name":{
        "value":"daisy"
      }
    }
  }
}

6.x-pack安裝

6.1安裝:

cd /elk/elasticsearch-6.7.0/bin && ./elasticsearch-plugin install x-pack
cd /elk/logstash-6.7.0/bin/ && ./logstash-plugin install x-pack
cd cd /elk/kibana-6.7.0/bin/ && ./kibana-plugin install x-pack
提示:
ERROR: this distribution of Elasticsearch contains X-Pack by default   表示es的x-pack包默認(rèn)已安裝
Logstash now contains X-Pack by default, there is no longer any need to install
it as it is already present.
ERROR: Invalid pack for: x-pack, reason: x-pack not an installable plugin, message: x-pack not an installable plugin      表示logstash的x-pack包默認(rèn)已安裝
Plugin installation was unsuccessful due to error "Kibana now contains X-Pack by default, there is no longer any need to install it as it is already present."   表示kibana的x-pack包默認(rèn)已安裝

6.2破解

參考:https://www.linuxea.com/1895.html
破解包下載:51下載
license申請(qǐng):申請(qǐng)license
時(shí)間戳:https://tool.lu/timestamp/

6.2.1將破解包下載下來(lái),包含下面兩個(gè)文件(重寫x-pack的兩個(gè)類)

-rw-rw-r-- 1 elk  elk     4786 3月  21 15:34 LicenseVerifier.class
-rw-rw-r-- 1 elk  elk     2893 3月  21 15:34 XPackBuild.class

6.2.2 找到目標(biāo)jar包

/elk/elasticsearch-6.7.0/modules/x-pack-core/x-pack-core-6.7.0.jar

6.2.3 替換jar包

為了能夠分辨清楚,創(chuàng)建old哲思,解壓jar包
[elk@elk old]$ jar -xf x-pack-core-6.7.0.jar
-rw-rw-r-- 1 elk elk     994 3月  21 15:34 logstash-index-template.json
drwxrwxr-x 2 elk elk    4096 3月  21 15:34 META-INF
-rw-rw-r-- 1 elk elk    1247 3月  21 15:34 monitoring-alerts.json
-rw-rw-r-- 1 elk elk   24213 3月  21 15:34 monitoring-beats.json
-rw-rw-r-- 1 elk elk   32309 3月  21 15:34 monitoring-es.json
-rw-rw-r-- 1 elk elk    5899 3月  21 15:34 monitoring-kibana.json
-rw-rw-r-- 1 elk elk   11787 3月  21 15:34 monitoring-logstash.json
drwxrwxr-x 3 elk elk    4096 3月  21 15:34 org
-rw-rw-r-- 1 elk elk     294 3月  21 15:34 public.key
-rw-rw-r-- 1 elk elk     556 3月  21 15:34 rollup-dynamic-template.json
-rw-rw-r-- 1 elk elk    1859 3月  21 15:34 security_audit_log.json
-rw-rw-r-- 1 elk elk    6038 3月  21 15:34 security-index-template.json
-rw-rw-r-- 1 elk elk     893 3月  21 15:34 triggered-watches.json
-rw-rw-r-- 1 elk elk    1391 3月  21 15:34 watches.json
-rw-rw-r-- 1 elk elk   19869 3月  21 15:34 watch-history.json
替換jar包中的 LicenseVerifier.class嗓节,XPackBuild.class兩個(gè)類文件
cp -a LicenseVerifier.class old/org/elasticsearch/license/
cp -a XPackBuild.class old/org/elasticsearch/xpack/core/
打包
[elk@elk old]$jar -cvf x-pack-core-6.7.0.jar
將打包好的x-pack-core-6.7.0.jar替換之前的/elk/elasticsearch-6.7.0/modules/x-pack-core/x-pack-core-6.7.0.jar目標(biāo)jar包

6.2.4申請(qǐng)license并上傳
根據(jù)上面的連接申請(qǐng)license屡穗,認(rèn)真填寫郵箱,用來(lái)接收json文件,country寫china讯蒲,其它都可以隨便寫沿盅,點(diǎn)擊申請(qǐng)后郵箱會(huì)馬上收到一個(gè)郵件
“type”:“basic” 替換為 “type”:"platinum" # 基礎(chǔ)版變更為鉑金版
“expiry_date_in_millis”:1561420799999 替換為 “expiry_date_in_millis”:3107746200000# 一個(gè)月變?yōu)?0年
大概格式:

{"license":{
    "uid":"2651b126-fef3-480e-ad4c-a60eb696a733",
    "type":"platinum", # 白金
    "issue_date_in_millis":1533513600000,
    "expiry_date_in_millis":3107746200000, # 到期時(shí)間
.............................

當(dāng)修改了時(shí)間和白金類型后把篓,來(lái)到 Management 選擇 License Management,點(diǎn)擊update license上傳以及修改好的License

image.png

如上圖腰涧,如果提示錯(cuò)誤韧掩,注意修改打開elasticsearch.yml 配置文件 加入 xpack.security.enabled: false,或者執(zhí)行“ 啟動(dòng)x-pack功能”再更新
破解成功后顯示


image.png

6.3啟動(dòng)x-pack功能:

es集群配置x-pack

6.3.1 開啟es的登錄功能窖铡,注意使用普通用戶

[elk@elk old]$ cd /elk/elasticsearch-6.7.0/
bin/elasticsearch-setup-passwords interactive   ##注意修改elastic/kibana等賬號(hào)的密碼疗锐,elastic是登錄es的最高權(quán)限賬號(hào)
修改elasticsearch.yml配置:
cat /elk/elasticsearch-6.7.0/config/elasticsearch.yml
#添加如下2行,打開安全配置功能
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true

6.3.2 修改kibana.yml配置

cat /elk/kibana-6.7.0/config/kibana.yml
#添加如下兩行
29 elasticsearch.username: "kibana"
30 elasticsearch.password: "your passwd"

此處修改完万伤,重啟es和kibana服務(wù)就需要登錄賬號(hào)和密碼了


image.png

6.3.3 修改logstash.yml配置

219 xpack.monitoring.enabled: true
220 xpack.monitoring.elasticsearch.username: logstash_system
221 xpack.monitoring.elasticsearch.password: your passwd
222 xpack.monitoring.elasticsearch.hosts: ["http://192.168.100.203:9200"]

配置logstash.conf時(shí)要添加用戶名密碼窒悔,如

配置 5044 端口作為 Filebeat 的連接和創(chuàng)建 ES 索引呜袁,保存在 config 目錄:
[elk@elk config]$ cat logstash-sample.conf 
# Sample Logstash configuration for creating a simple
# Beats -> Logstash -> Elasticsearch pipeline.

input {
  beats {
    port => 5044
  }
}

output {
  elasticsearch {
    hosts => ["http://192.168.100.203:9200"]
    index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
    user => "elastic"
    password => "your passwd"
  }
}

Logstash 使用該配置使用 ES 的索引敌买,和 Filebeat 做的事情是一樣的,不過擁有了額外的緩存以及強(qiáng)大豐富的插件庫(kù)阶界。
啟動(dòng) logstash :
./bin/logstash -f config/logstash-sample.conf &
此時(shí)開啟filebeat虹钮,就可以在es中查看到log了

參考:https://segmentfault.com/a/1190000010981283

7.filebeat安裝

安裝

[root@zabbix data]# tar -xzf filebeat-6.7.0-linux-x86_64.tar.gz
[root@zabbix data]# cd filebeat-6.7.0-linux-x86_64/

修改配置文件
注意:

  enabled: true        ##true
  paths:
    -  /confluence/confluence_home/logs/catalina.out  #填寫具體的日志路徑
  reload.enabled: true   ##true
 fields:
   env: wiki      ##名稱
  output.logstash:
    hosts: ["IP:5044"]    ##注意輸出到logstash中,需要填寫logstash的IP和端口
[root@zabbix data]# vim filebeat.yml
filebeat.inputs:
- type: log
  enabled: true       
  paths:
    -  /confluence/confluence_home/logs/catalina.out
fields:
  env: wiki
filebeat.config.modules:
  path: ${path.config}/modules.d/*.yml
  reload.enabled: true
setup.template.settings:
  index.number_of_shards: 3
setup.kibana:
output.logstash:
    hosts: ["IP:5044"]
processors:
  - add_host_metadata: ~
  - add_cloud_metadata: ~

啟動(dòng)

測(cè)試是否正常
./filebeat -configtest -e
啟動(dòng)
nohup ./filebeat -c ./filebeat.yml -e >/dev/null 2>filebeat.log &

打開kibana控制臺(tái)可以看到


image.png

注意:

如果數(shù)據(jù)無(wú)法傳輸要手動(dòng)加載模板
在 Elasticsearch 中膘融, Index Pattern 用于定義字段應(yīng)如何分析的設(shè)置和映射芙粱。Filebeat 的默認(rèn) Index Pattern 由軟件包安裝。 如果在 filebeat.yml 配置文件中接受模板加載的默認(rèn)配置氧映,則 Filebeat 在成功連接到Elasticsearch后會(huì)自動(dòng)加載模板春畔。 如果模板已存在,默認(rèn)不會(huì)覆蓋岛都,但是可以通過配置進(jìn)行覆蓋律姨。如果要禁用自動(dòng)模板加載,或者要加載自己的模板臼疫,可以在Filebeat配置文件中更改模板加載的設(shè)置择份。 如果選擇禁用自動(dòng)模板加載,則需要手動(dòng)加載模板烫堤。
配置模板加載 - 僅Elasticsearch輸出支持荣赶。
手動(dòng)加載模板 - Logstash輸出所需。
由于我們需要的是輸出到 Logstash鸽斟,所以我們使用手動(dòng)模板加載:
curl -XPUT 'http://192.168.100.203:9200/_template/filebeat' -d@/data/filebeat-6.7.0-linux-x86_64/kibana/6/index-pattern/filebeat.json

8.kibana漢化

參考:https://github.com/anbai-inc/Kibana_Hanization

漢化方法(6.x)

  • 拷貝此項(xiàng)目中的translations文件夾到您的kibana目錄下的src/legacy/core_plugins/kibana/目錄拔创。若您的kibana無(wú)此目錄,那還是嘗試使用此項(xiàng)目old目錄下的漢化方法吧富蓄。
  • 修改您的kibana配置文件kibana.yml中的配置項(xiàng):i18n.locale: "zh-CN"
  • 重啟Kibana伏蚊,漢化完成

9.Q&&A

  • filebeat 數(shù)據(jù)一直傳輸不過去
運(yùn)行filebeat時(shí),log中顯示:
2019-04-04T10:58:39.928+0800    INFO    log/input.go:138    Configured paths: [/var/log/logstash/logstash-slowlog-plain*.log]
2019-04-04T10:58:39.929+0800    INFO    log/input.go:138    Configured paths: [/var/log/logstash/logstash-plain*.log]
查看/opt/filebeat-6.7.0-linux-x86_64/modules.d格粪,發(fā)現(xiàn)logsatsh模塊時(shí)打開的
./filebeat modules disable logstash
關(guān)閉后再次執(zhí)行就會(huì)發(fā)送到配置文件中的logstash中了
多個(gè)log注意配置logstash
  • filebeat修改index默認(rèn)名稱躏吊,filebeat到es(單個(gè))

參考:filebeat

默認(rèn)值為 "filebeat-%{[beat.version]}-%{+yyyy.MM.dd}"
 # Array of hosts to connect to.
 hosts: ["localhost:9200"]
 index: "api-access-%{+yyyy.MM.dd}"
setup.template:
 name: 'api-access'
 pattern: 'api-access-*'
 enabled: false

filebeat修改index默認(rèn)名稱氛改,filebeat到es(多個(gè))

10. 參考

原理>>
elk常用架構(gòu)以及場(chǎng)景介紹
https://www.ibm.com/developerworks/cn/opensource/os-cn-elk-filebeat/index.html
elk協(xié)議棧介紹
https://www.ibm.com/developerworks/cn/opensource/os-cn-elk/
安裝>>
https://segmentfault.com/a/1190000010975383
grok學(xué)習(xí)>>
https://www.elastic.co/guide/en/kibana/7.1/xpack-grokdebugger.html
http://grokconstructor.appspot.com/
http://grokdebug.herokuapp.com/ 調(diào)試工具
https://zhuanlan.zhihu.com/p/26399963
http://docs.flycloud.me/docs/ELKStack/logstash/get-start/install.html
Elasticsearch權(quán)威指南中文版>>
https://es.xiaoleilu.com/030_Data/25_Update.html
ELK安全加固:https://shuwoom.com/?p=2846
日志收集原理

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市比伏,隨后出現(xiàn)的幾起案子胜卤,更是在濱河造成了極大的恐慌,老刑警劉巖赁项,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件葛躏,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡悠菜,警方通過查閱死者的電腦和手機(jī)舰攒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)悔醋,“玉大人摩窃,你說(shuō)我怎么就攤上這事》医荆” “怎么了猾愿?”我有些...
    開封第一講書人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)账阻。 經(jīng)常有香客問我蒂秘,道長(zhǎng),這世上最難降的妖魔是什么淘太? 我笑而不...
    開封第一講書人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任姻僧,我火速辦了婚禮,結(jié)果婚禮上蒲牧,老公的妹妹穿的比我還像新娘撇贺。我一直安慰自己,他們只是感情好造成,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開白布显熏。 她就那樣靜靜地躺著,像睡著了一般晒屎。 火紅的嫁衣襯著肌膚如雪喘蟆。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,036評(píng)論 1 285
  • 那天鼓鲁,我揣著相機(jī)與錄音蕴轨,去河邊找鬼。 笑死骇吭,一個(gè)胖子當(dāng)著我的面吹牛橙弱,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼棘脐,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼斜筐!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起蛀缝,我...
    開封第一講書人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤顷链,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后屈梁,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體嗤练,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年在讶,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了煞抬。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡构哺,死狀恐怖革答,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情遮婶,我是刑警寧澤蝗碎,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布湖笨,位于F島的核電站旗扑,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏慈省。R本人自食惡果不足惜臀防,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望边败。 院中可真熱鬧袱衷,春花似錦、人聲如沸笑窜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)排截。三九已至嫌蚤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間断傲,已是汗流浹背脱吱。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留认罩,地道東北人箱蝠。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親宦搬。 傳聞我的和親對(duì)象是個(gè)殘疾皇子牙瓢,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345

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