最牛逼的集群監(jiān)控系統(tǒng),它始終位列第一羽资!

在本文中淘菩,我們將看到Prometheus監(jiān)控技術(shù)棧的局限性,以及為什么移動(dòng)到基于Thanos的技術(shù)棧可以提高指標(biāo)留存率并降低總體基礎(chǔ)設(shè)施成本潮改。

用于此演示的內(nèi)容可以在下面鏈接中獲取狭郑,并提交到他們各自的許可證。

1.Kubernetes普羅米修斯技術(shù)棧

在為我們的客戶部署Kubernetes基礎(chǔ)設(shè)施時(shí)汇在,在每個(gè)集群上部署監(jiān)控技術(shù)棧是標(biāo)準(zhǔn)做法翰萨。這個(gè)堆棧通常由幾個(gè)組件組成:

  • Prometheus: 收集度量標(biāo)準(zhǔn)
  • 告警管理器: 根據(jù)指標(biāo)查詢向各種提供者發(fā)送警報(bào)
  • Grafana: 可視化豪華儀表板

簡(jiǎn)化架構(gòu)如下:

注意事項(xiàng)

這種架構(gòu)有一些注意事項(xiàng),當(dāng)你想從其中獲取指標(biāo)的集群數(shù)量增加時(shí)糕殉,它的伸縮性以及可擴(kuò)展性不太好亩鬼。

多個(gè)Grafana

在這種設(shè)置中,每個(gè)集群都有自己的Grafana和自己的一組儀表板阿蝶,維護(hù)起來(lái)很麻煩雳锋。

存儲(chǔ)指標(biāo)數(shù)據(jù)是昂貴的

Prometheus將指標(biāo)數(shù)據(jù)存儲(chǔ)在磁盤(pán)上,你必須在存儲(chǔ)空間和指標(biāo)保留時(shí)間之間做出選擇赡磅。如果你想長(zhǎng)時(shí)間存儲(chǔ)數(shù)據(jù)并在云提供商上運(yùn)行魄缚,那么如果存儲(chǔ)TB的數(shù)據(jù),塊存儲(chǔ)的成本可能會(huì)很高焚廊。

同樣冶匹,在生產(chǎn)環(huán)境中,Prometheus經(jīng)常使用復(fù)制或分片或兩者同時(shí)運(yùn)行咆瘟,這可能會(huì)使存儲(chǔ)需求增加兩倍甚至四倍嚼隘。

解決方案

多個(gè)Grafana數(shù)據(jù)源

可以在外部網(wǎng)絡(luò)上公開(kāi)Prometheus的端點(diǎn),并將它們作為數(shù)據(jù)源添加到單個(gè)Grafana中袒餐。你只需要在Prometheus外部端點(diǎn)上使用TLS或TLS和基本認(rèn)證來(lái)實(shí)現(xiàn)安全性飞蛹。此解決方案的缺點(diǎn)是不能基于不同的數(shù)據(jù)源進(jìn)行計(jì)算。

Prometheus聯(lián)邦

Prometheus聯(lián)邦允許從Prometheus中抓取Prometheus灸眼,當(dāng)你不抓取很多指標(biāo)數(shù)據(jù)時(shí)卧檐,這個(gè)解決方案可以很好地工作。在規(guī)模上焰宣,如果你所有的Prometheus目標(biāo)的抓取持續(xù)時(shí)間都比抓取間隔長(zhǎng)霉囚,可能會(huì)遇到一些嚴(yán)重的問(wèn)題。

Prometheus遠(yuǎn)程寫(xiě)

雖然遠(yuǎn)程寫(xiě)入是一種解決方案(也由Thanos receiver實(shí)現(xiàn))匕积,但我們將不在本文中討論“推送指標(biāo)”部分盈罐。建議在不信任多個(gè)集群或租戶的情況下(例如在將Prometheus構(gòu)建為服務(wù)提供時(shí)),將指標(biāo)作為最后的手段闪唆。無(wú)論如何盅粪,這可能是以后文章的主題,但我們將在這里集中討論抓取悄蕾。

2.Thanos

Thanos是一個(gè)“開(kāi)源的票顾,高可用的Prometheus系統(tǒng),具有長(zhǎng)期存儲(chǔ)能力”。很多知名公司都在使用Thanos库物,也是CNCF孵化項(xiàng)目的一部分霸旗。

Thanos的一個(gè)主要特點(diǎn)就是允許“無(wú)限”存儲(chǔ)空間。通過(guò)使用對(duì)象存儲(chǔ)(比如S3)戚揭,幾乎每個(gè)云提供商都提供對(duì)象存儲(chǔ)诱告。如果在前提環(huán)境下運(yùn)行,對(duì)象存儲(chǔ)可以通過(guò)rook或minio這樣的解決方案提供民晒。

它是如何工作的精居?

Thanos和Prometheus并肩作戰(zhàn),從Prometheus開(kāi)始升級(jí)到Thanos是很常見(jiàn)的潜必。

Thanos被分成幾個(gè)組件靴姿,每個(gè)組件都有一個(gè)目標(biāo)(每個(gè)服務(wù)都應(yīng)該這樣:)),組件之間通過(guò)gRPC進(jìn)行通信磁滚。

Thanos Sidecar

Thanos和Prometheus一起運(yùn)行(有一個(gè)邊車(chē))佛吓,每2小時(shí)向一個(gè)對(duì)象存儲(chǔ)庫(kù)輸出Prometheus指標(biāo)。這使得Prometheus幾乎是無(wú)狀態(tài)的垂攘。

Prometheus仍然在內(nèi)存中保存著2個(gè)小時(shí)的度量值维雇,所以在發(fā)生宕機(jī)的情況下,你可能仍然會(huì)丟失2個(gè)小時(shí)的度量值(這個(gè)問(wèn)題應(yīng)該由你的Prometheus設(shè)置來(lái)處理晒他,使用HA/分片吱型,而不是Thanos)。

Thanos sidecar與Prometheus運(yùn)營(yíng)者和Kube Prometheus棧一起陨仅,可以輕松部署津滞。這個(gè)組件充當(dāng)Thanos查詢的存儲(chǔ)。

Thanos存儲(chǔ)

Thanos存儲(chǔ)充當(dāng)一個(gè)網(wǎng)關(guān)灼伤,將查詢轉(zhuǎn)換為遠(yuǎn)程對(duì)象存儲(chǔ)触徐。它還可以在本地存儲(chǔ)器上緩存一些信息『模基本上撞鹉,這個(gè)組件允許你查詢對(duì)象存儲(chǔ)以獲取指標(biāo)。這個(gè)組件充當(dāng)Thanos查詢的存儲(chǔ)猾警。

Thanos Compactor

Thanos Compactor是一個(gè)單例(它是不可擴(kuò)展的)孔祸,它負(fù)責(zé)壓縮和降低存儲(chǔ)在對(duì)象存儲(chǔ)中的指標(biāo)隆敢。下采樣是隨著時(shí)間的推移對(duì)指標(biāo)力度的寬松发皿。例如,你可能想將你的指標(biāo)保持2年或3年拂蝎,但你不需要像昨天的指標(biāo)那么多數(shù)據(jù)點(diǎn)穴墅。這就是壓縮器的作用,它可以在對(duì)象存儲(chǔ)上節(jié)省資節(jié),從而節(jié)省成本玄货。

Thanos Query

Thanos查詢是Thanos的主要組件皇钞,它是向其發(fā)送PromQL查詢的中心點(diǎn)。Thanos查詢暴露了一個(gè)與Prometheus兼容的端點(diǎn)松捉。然后它將查詢結(jié)果分派給所有的“stores”夹界。記住,Store可能是任何其他提供指標(biāo)的Thanos組件隘世。

Thanos查詢可以發(fā)送查詢到另一個(gè)Thanos查詢(他們可以堆疊)可柿。

  • Thanos Store
  • Thanos Sidecar
  • Thanos Query

還負(fù)責(zé)對(duì)來(lái)自不同Store或Prometheus的相同指標(biāo)進(jìn)行重復(fù)數(shù)據(jù)刪除。例如丙者,如果你有一個(gè)度量值在Prometheus中复斥,同時(shí)也在對(duì)象存儲(chǔ)中,Thanos Query可以對(duì)該指標(biāo)值進(jìn)行重復(fù)數(shù)據(jù)刪除械媒。在Prometheus HA設(shè)置的情況下目锭,重復(fù)數(shù)據(jù)刪除也基于Prometheus副本和分片。

Thanos Query Frontend

正如它的名字所暗示的纷捞,Thanos查詢前端是Thanos查詢的前端痢虹,它的目標(biāo)是將大型查詢拆分為多個(gè)較小的查詢,并緩存查詢結(jié)果(在內(nèi)存或memcached中)兰绣。

還有其他組件世分,比如在遠(yuǎn)程寫(xiě)的情況下接收Thanos,但這仍然不是本文的主題缀辩。

3.多集群架構(gòu)

有多種方法可以將這些組件部署到多個(gè)Kubernetes集群中臭埋,根據(jù)用例的不同,有些方法比其他方法更好臀玄,在這里我們不能給出詳細(xì)的介紹瓢阴。

我們的例子是在AWS上運(yùn)行,使用tEKS部署了2個(gè)集群健无,我們的all in one解決方案將生產(chǎn)就緒的EKS集群部署在AWS上:

  • 一個(gè)觀察者集群
  • 一個(gè)觀察集群

我們的部署使用了官方的kube-prometheus-stack和bitnami thanos圖表荣恐。

一切都是在我們的terraform-kubernetes-addons存儲(chǔ)庫(kù)中策劃的。

Thanos demo文件夾中的目錄結(jié)構(gòu)如下:

├── ? env_tags.yaml  
├── ? eu-west-1  
│ ├── ? clusters  
│ │ └── ? observer  
│ │ ├── ? eks  
│ │ │ ├── ? kubeconfig  
│ │ │ └── ? terragrunt.hcl  
│ │ ├── ? eks-addons  
│ │ │ └── ? terragrunt.hcl  
│ │ └── ? vpc  
│ │ └── ? terragrunt.hcl  
│ └── ? region_values.yaml  
└── ? eu-west-3  
   ├── ? clusters  
   │ └── ? observee  
   │ ├── ? cluster_values.yaml  
   │ ├── ? eks  
   │ │ ├── ? kubeconfig  
   │ │ └── ? terragrunt.hcl  
   │ ├── ? eks-addons  
   │ │ └── ? terragrunt.hcl  
   │ └── ? vpc  
   │ └── ? terragrunt.hcl  
   └── ? region_values.yaml

這允許DRY(Don 't Repeat Yourself)基礎(chǔ)設(shè)施累贤,并可以輕松地?cái)U(kuò)展AWS帳戶叠穆、區(qū)域和集群的數(shù)量。

觀察者集群

觀察者集群是我們的主集群臼膏,我們將從它查詢其他集群:

Prometheus正在運(yùn)行:

  • Grafana啟用
  • Thanos邊車(chē)上傳到特定的桶
kube-prometheus-stack = {  
  enabled = true  
  allowed_cidrs = dependency.vpc.outputs.private_subnets_cidr_blocks  
  thanos_sidecar_enabled = true  
  thanos_bucket_force_destroy = true  
  extra_values = <<-EXTRA_VALUES  
    grafana:  
      deploymentStrategy:  
        type: Recreate  
      ingress:  
        enabled: true  
        annotations:  
          kubernetes.io/ingress.class: nginx  
          cert-manager.io/cluster-issuer: "letsencrypt"  
        hosts:  
          - grafana.${local.default_domain_suffix}  
        tls:  
          - secretName: grafana.${local.default_domain_suffix}  
            hosts:  
              - grafana.${local.default_domain_suffix}  
      persistence:  
        enabled: true  
        storageClassName: ebs-sc  
        accessModes:  
          - ReadWriteOnce  
        size: 1Gi  
    prometheus:  
      prometheusSpec:  
        replicas: 1  
        retention: 2d  
        retentionSize: "10GB"  
        ruleSelectorNilUsesHelmValues: false  
        serviceMonitorSelectorNilUsesHelmValues: false  
        podMonitorSelectorNilUsesHelmValues: false  
        storageSpec:  
          volumeClaimTemplate:  
            spec:  
              storageClassName: ebs-sc  
              accessModes: ["ReadWriteOnce"]  
              resources:  
                requests:  
                  storage: 10Gi  
    EXTRA_VALUES

為觀察者集群生成一個(gè)CA證書(shū):

  • 這個(gè)CA將被進(jìn)入sidecar的被觀察集群所信任
  • 為T(mén)hanos querier組件生成TLS證書(shū)硼被,這些組件將查詢被觀察集群

Thanos組件部署:

  • Thanos組件全部部署完成
  • 查詢前端,作為Grafana的數(shù)據(jù)源端點(diǎn)
  • 存儲(chǔ)網(wǎng)關(guān)用于查詢觀察系統(tǒng)
  • Query將對(duì)存儲(chǔ)網(wǎng)關(guān)和其他查詢器執(zhí)行查詢

部署的額外Thanos組件:

  • 配置了TLS的Thanos查詢器對(duì)每個(gè)被觀察集群進(jìn)行查詢
thanos-tls-querier = {  
  "observee" = {  
    enabled = true  
    default_global_requests = true  
    default_global_limits = false  
    stores = [  
      "thanos-sidecar.${local.default_domain_suffix}:443"  
    ]  
  }  
}  

thanos-storegateway = {  
  "observee" = {  
    enabled = true  
    default_global_requests = true  
    default_global_limits = false  
    bucket = "thanos-store-pio-thanos-observee"  
    region = "eu-west-3"  
  }

被觀測(cè)集群

被觀測(cè)集群是Kubernetes集群渗磅,具有最小的Prometheus/Thanos安裝嚷硫,將被觀測(cè)集群查詢检访。

Prometheus operator正在運(yùn)行:

  • Thanos這邊就是上傳給觀察者特定的桶
  • Thanos邊車(chē)與TLS客戶端認(rèn)證的入口對(duì)象一起發(fā)布,并信任觀察者集群CA
kube-prometheus-stack = {  
  enabled = true  
  allowed_cidrs = dependency.vpc.outputs.private_subnets_cidr_blocks  
  thanos_sidecar_enabled = true  
  thanos_bucket_force_destroy = true  
  extra_values = <<-EXTRA_VALUES  
    grafana:  
      enabled: false  
    prometheus:  
      thanosIngress:  
        enabled: true  
        ingressClassName: nginx  
        annotations:  
          cert-manager.io/cluster-issuer: "letsencrypt"  
          nginx.ingress.kubernetes.io/ssl-redirect: "true"  
          nginx.ingress.kubernetes.io/backend-protocol: "GRPC"  
          nginx.ingress.kubernetes.io/auth-tls-verify-client: "on"  
          nginx.ingress.kubernetes.io/auth-tls-secret: "monitoring/thanos-ca"  
        hosts:  
        - thanos-sidecar.${local.default_domain_suffix}  
        paths:  
        - /  
        tls:  
        - secretName: thanos-sidecar.${local.default_domain_suffix}  
          hosts:  
          - thanos-sidecar.${local.default_domain_suffix}  
      prometheusSpec:  
        replicas: 1  
        retention: 2d  
        retentionSize: "6GB"  
        ruleSelectorNilUsesHelmValues: false  
        serviceMonitorSelectorNilUsesHelmValues: false  
        podMonitorSelectorNilUsesHelmValues: false  
        storageSpec:  
          volumeClaimTemplate:  
            spec:  
              storageClassName: ebs-sc  
              accessModes: ["ReadWriteOnce"]  
              resources:  
                requests:  
                  storage: 10Gi  
    EXTRA_VALUES

Thanos組件部署:

  • Thanos壓縮器來(lái)管理這個(gè)特定集群的下采樣
thanos = {  
  enabled = true  
  bucket_force_destroy = true  
  trusted_ca_content = dependency.thanos-ca.outputs.thanos_ca  
  extra_values = <<-EXTRA_VALUES  
    compactor:  
      retentionResolution5m: 90d  
    query:  
      enabled: false  
    queryFrontend:  
      enabled: false  
    storegateway:  
      enabled: false  
    EXTRA_VALUES  
}

4.再深入一點(diǎn)

讓我們檢查一下集群上正在運(yùn)行什么仔掸。

關(guān)于觀察員脆贵,我們有:

kubectl -n monitoring get pods  
NAME READY STATUS RESTARTS AGE  
alertmanager-kube-prometheus-stack-alertmanager-0           2/2     Running 0          120m  
kube-prometheus-stack-grafana-c8768466b-rd8wm 2/2     Running 0          120m  
kube-prometheus-stack-kube-state-metrics-5cf575d8f8-x59rd 1/1     Running 0          120m  
kube-prometheus-stack-operator-6856b9bb58-hdrb2 1/1     Running 0          119m  
kube-prometheus-stack-prometheus-node-exporter-8hvmv 1/1     Running 0          117m  
kube-prometheus-stack-prometheus-node-exporter-cwlfd 1/1     Running 0          120m  
kube-prometheus-stack-prometheus-node-exporter-rsss5 1/1     Running 0          120m  
kube-prometheus-stack-prometheus-node-exporter-rzgr9 1/1     Running 0          120m  
prometheus-kube-prometheus-stack-prometheus-0               3/3     Running 1          120m  
thanos-compactor-74784bd59d-vmvps 1/1     Running 0          119m  
thanos-query-7c74db546c-d7bp8 1/1     Running 0          12m  
thanos-query-7c74db546c-ndnx2 1/1     Running 0          12m  
thanos-query-frontend-5cbcb65b57-5sx8z 1/1     Running 0          119m  
thanos-query-frontend-5cbcb65b57-qjhxg 1/1     Running 0          119m  
thanos-storegateway-0                                       1/1     Running 0          119m  
thanos-storegateway-1                                       1/1     Running 0          118m  
thanos-storegateway-observee-storegateway-0                 1/1     Running 0          12m  
thanos-storegateway-observee-storegateway-1                 1/1     Running 0          11m  
thanos-tls-querier-observee-query-dfb9f79f9-4str8 1/1     Running 0          29m  
thanos-tls-querier-observee-query-dfb9f79f9-xsq24 1/1     Running 0          29m  

kubectl -n monitoring get ingress  
NAME CLASS HOSTS ADDRESS PORTS AGE  
kube-prometheus-stack-grafana <none> grafana.thanos.teks-tg.clusterfrak-dynamics.io k8s-ingressn-ingressn-afa0a48374-f507283b6cd101c5.elb.eu-west-1.amazonaws.com 80, 443   123m

被觀察者:

kubectl -n monitoring get pods  
NAME READY STATUS RESTARTS AGE  
alertmanager-kube-prometheus-stack-alertmanager-0           2/2     Running 0          39m  
kube-prometheus-stack-kube-state-metrics-5cf575d8f8-ct292 1/1     Running 0          39m  
kube-prometheus-stack-operator-6856b9bb58-4cngc 1/1     Running 0          39m  
kube-prometheus-stack-prometheus-node-exporter-bs4wp 1/1     Running 0          39m  
kube-prometheus-stack-prometheus-node-exporter-c57ss 1/1     Running 0          39m  
kube-prometheus-stack-prometheus-node-exporter-cp5ch 1/1     Running 0          39m  
kube-prometheus-stack-prometheus-node-exporter-tnqvq 1/1     Running 0          39m  
kube-prometheus-stack-prometheus-node-exporter-z2p49 1/1     Running 0          39m  
kube-prometheus-stack-prometheus-node-exporter-zzqp7 1/1     Running 0          39m  
prometheus-kube-prometheus-stack-prometheus-0               3/3     Running 1          39m  
thanos-compactor-7576dcbcfc-6pd4v 1/1     Running 0          38m  

kubectl -n monitoring get ingress  
NAME CLASS HOSTS ADDRESS PORTS AGE  
kube-prometheus-stack-thanos-gateway nginx thanos-sidecar.thanos.teks-tg.clusterfrak-dynamics.io k8s-ingressn-ingressn-95903f6102-d2ce9013ac068b9e.elb.eu-west-3.amazonaws.com 80, 443   40m

我們的TLS查詢器應(yīng)該能夠查詢被觀測(cè)集群的度量標(biāo)準(zhǔn)。

讓我們來(lái)看看它們的行為:

k -n monitoring logs -f thanos-tls-querier-observee-query-687dd88ff5-nzpdh  

level=info ts=2021-02-23T15:37:35.692346206Z caller=storeset.go:387 component=storeset msg="adding new storeAPI to query storeset" address=thanos-sidecar.thanos.teks-tg.clusterfrak-dynamics.io:443 extLset="{cluster=\"pio-thanos-observee\", prometheus=\"monitoring/kube-prometheus-stack-prometheus\", prometheus_replica=\"prometheus-kube-prometheus-stack-prometheus-0\"}"

所以這個(gè)查詢器pods可以查詢我的其他集群起暮,如果我們檢查Web卖氨,我們可以看到存儲(chǔ):

kubectl -n monitoring port-forward thanos-tls-querier-observee-query-687dd88ff5-nzpdh 10902

太棒了,但是我只有一個(gè)存儲(chǔ)负懦,還記得我們說(shuō)過(guò)查詢器可以堆疊在一起嗎双泪?在我們的觀察者集群中,我們有標(biāo)準(zhǔn)的http查詢器密似,它可以查詢架構(gòu)圖中的其他組件焙矛。

kubectl -n monitoring port-forward thanos-query-7c74db546c-d7bp8 10902

這里我們可以看到所有的存儲(chǔ)已經(jīng)被添加到我們的中心查詢器:

  • 觀察者把本地Thanos聚集
  • 我們的存儲(chǔ)網(wǎng)關(guān)(一個(gè)用于遠(yuǎn)程觀測(cè)者集群,一個(gè)用于本地觀測(cè)者集群)
  • 本地TLS查詢器残腌,它可以查詢被觀察的sidecar

5.在Grafana可視化

最后村斟,我們可以前往Grafana,看看默認(rèn)的Kubernetes儀表板是如何與多集群兼容的抛猫。

6.總結(jié)

Thanos是一個(gè)非常復(fù)雜的系統(tǒng)蟆盹,有很多移動(dòng)部件,我們沒(méi)有深入研究具體的自定義配置闺金,因?yàn)樗鼤?huì)花費(fèi)太多的時(shí)間逾滥。

我們?cè)趖EKS存儲(chǔ)庫(kù)中提供了一個(gè)相當(dāng)完整的AWS實(shí)現(xiàn),它抽象了很多復(fù)雜性(主要是mTLS部分)败匹,并允許進(jìn)行很多定制寨昙。你也可以使用terraform-kubernetes-addons模塊作為獨(dú)立的組件。我們計(jì)劃在未來(lái)支持其他云提供商掀亩。不要猶豫舔哪,通過(guò)Github上的任何一個(gè)項(xiàng)目的問(wèn)題聯(lián)系我們。

根據(jù)你的基礎(chǔ)設(shè)施和需求槽棍,有許多可能適合你的Thanos實(shí)現(xiàn)捉蚤。

如果你想深入研究Thanos,可以查看他們的官方kube-thanos存儲(chǔ)庫(kù)炼七,以及他們關(guān)于跨集群通信的建議缆巧。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市豌拙,隨后出現(xiàn)的幾起案子陕悬,更是在濱河造成了極大的恐慌,老刑警劉巖姆蘸,帶你破解...
    沈念sama閱讀 218,451評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件墩莫,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡逞敷,警方通過(guò)查閱死者的電腦和手機(jī)狂秦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)推捐,“玉大人裂问,你說(shuō)我怎么就攤上這事∨F猓” “怎么了堪簿?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,782評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)皮壁。 經(jīng)常有香客問(wèn)我椭更,道長(zhǎng),這世上最難降的妖魔是什么蛾魄? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,709評(píng)論 1 294
  • 正文 為了忘掉前任虑瀑,我火速辦了婚禮,結(jié)果婚禮上滴须,老公的妹妹穿的比我還像新娘舌狗。我一直安慰自己,他們只是感情好扔水,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,733評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布痛侍。 她就那樣靜靜地躺著,像睡著了一般魔市。 火紅的嫁衣襯著肌膚如雪主届。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,578評(píng)論 1 305
  • 那天待德,我揣著相機(jī)與錄音岂膳,去河邊找鬼。 笑死磅网,一個(gè)胖子當(dāng)著我的面吹牛谈截,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播涧偷,決...
    沈念sama閱讀 40,320評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼簸喂,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了燎潮?” 一聲冷哼從身側(cè)響起喻鳄,我...
    開(kāi)封第一講書(shū)人閱讀 39,241評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎确封,沒(méi)想到半個(gè)月后除呵,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體再菊,經(jīng)...
    沈念sama閱讀 45,686評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,878評(píng)論 3 336
  • 正文 我和宋清朗相戀三年颜曾,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了纠拔。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,992評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡泛豪,死狀恐怖稠诲,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情诡曙,我是刑警寧澤臀叙,帶...
    沈念sama閱讀 35,715評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站价卤,受9級(jí)特大地震影響劝萤,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜慎璧,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,336評(píng)論 3 330
  • 文/蒙蒙 一稳其、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧炸卑,春花似錦既鞠、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,912評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至五续,卻和暖如春洒敏,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背疙驾。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,040評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工凶伙, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人它碎。 一個(gè)月前我還...
    沈念sama閱讀 48,173評(píng)論 3 370
  • 正文 我出身青樓函荣,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親扳肛。 傳聞我的和親對(duì)象是個(gè)殘疾皇子傻挂,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,947評(píng)論 2 355

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