摘要:一概述的配置可以用命令行參數(shù)或者配置文件,如果是在集群內(nèi),一般配置在中以下均為版本查看可用的命令行參數(shù),可以執(zhí)行也可以指定對應(yīng)的配置文件,參數(shù)一般為如果配置有修改,如增添采集,可以重新加載它的配置。目前主要支持種服務(wù)發(fā)現(xiàn)模式,分別是。
本文將分析Prometheus的常見配置與服務(wù)發(fā)現(xiàn),分為概述、配置詳解、服務(wù)發(fā)現(xiàn)、常見場景四個(gè)部分進(jìn)行講解。
一. 概述Prometheus的配置可以用命令行參數(shù)、或者配置文件,如果是在k8s集群內(nèi),一般配置在configmap中(以下均為prometheus2.7版本)
查看可用的命令行參數(shù),可以執(zhí)行 ./prometheus -h
也可以指定對應(yīng)的配置文件,參數(shù):--config.file 一般為prometheus.yml
如果配置有修改,如增添采集job,Prometheus可以重新加載它的配置。只需要向其
進(jìn)程發(fā)送SIGHUP或向/-/reload端點(diǎn)發(fā)送HTTP POST請求。如:
curl -X POST http://localhost:9090/-/reload
二. 配置詳解執(zhí)行./prometheus -h 可以看到各個(gè)參數(shù)的含義,例如:
--web.listen-address="0.0.0.0:9090" 監(jiān)聽端口默認(rèn)為9090,可以修改只允許本機(jī)訪問,或者為了安全起見,可以改變其端口號(默認(rèn)的web服務(wù)沒有鑒權(quán)) --web.max-connections=512 默認(rèn)最大連接數(shù):512 --storage.tsdb.path="data/" 默認(rèn)的存儲路徑:data目錄下 --storage.tsdb.retention.time=15d 默認(rèn)的數(shù)據(jù)保留時(shí)間:15天。原有的storage.tsdb.retention配置已經(jīng)被廢棄 --alertmanager.timeout=10s 把報(bào)警發(fā)送給alertmanager的超時(shí)限制 10s --query.timeout=2m 查詢超時(shí)時(shí)間限制默認(rèn)為2min,超過自動(dòng)被kill掉。可以結(jié)合grafana的限時(shí)配置如60s --query.max-concurrency=20 并發(fā)查詢數(shù) prometheus的默認(rèn)采集指標(biāo)中有一項(xiàng)prometheus_engine_queries_concurrent_max可以拿到最大查詢并發(fā)數(shù)及查詢情況 --log.level=info 日志打印等級一共四種:[debug, info, warn, error],如果調(diào)試屬性可以先改為debug等級 .....
在prometheus的頁面上,status的Command-Line Flags中,可以看到當(dāng)前配置,如promethues-operator的配置是:
從官方的download頁下載的promethues二進(jìn)制文件,會(huì)自帶一份默認(rèn)配置prometheus.yml
-rw-r--r--@ LICENSE -rw-r--r--@ NOTICE drwxr-xr-x@ console_libraries drwxr-xr-x@ consoles -rwxr-xr-x@ prometheus -rw-r--r--@ prometheus.yml -rwxr-xr-x@ promtool
prometheus.yml配置了很多屬性,包括遠(yuǎn)程存儲、報(bào)警配置等很多內(nèi)容,下面將對主要屬性進(jìn)行解釋:
# 默認(rèn)的全局配置 global: scrape_interval: 15s # 采集間隔15s,默認(rèn)為1min一次 evaluation_interval: 15s # 計(jì)算規(guī)則的間隔15s默認(rèn)為1min一次 scrape_timeout: 10s # 采集超時(shí)時(shí)間,默認(rèn)為10s external_labels: # 當(dāng)和其他外部系統(tǒng)交互時(shí)的標(biāo)簽,如遠(yuǎn)程存儲、聯(lián)邦集群時(shí) prometheus: monitoring/k8s # 如:prometheus-operator的配置 prometheus_replica: prometheus-k8s-1 # Alertmanager的配置 alerting: alertmanagers: - static_configs: - targets: - 127.0.0.1:9093 # alertmanager的服務(wù)地址,如127.0.0.1:9093 alert_relabel_configs: # 在抓取之前對任何目標(biāo)及其標(biāo)簽進(jìn)行修改。 - separator: ; regex: prometheus_replica replacement: $1 action: labeldrop # 一旦加載了報(bào)警規(guī)則文件,將按照evaluation_interval即15s一次進(jìn)行計(jì)算,rule文件可以有多個(gè) rule_files: # - "first_rules.yml" # - "second_rules.yml" # scrape_configs為采集配置,包含至少一個(gè)job scrape_configs: # Prometheus的自身監(jiān)控 將在采集到的時(shí)間序列數(shù)據(jù)上打上標(biāo)簽job=xx - job_name: "prometheus" # 采集指標(biāo)的默認(rèn)路徑為:/metrics,如 localhost:9090/metric # 協(xié)議默認(rèn)為http static_configs: - targets: ["localhost:9090"] # 遠(yuǎn)程讀,可選配置,如將監(jiān)控?cái)?shù)據(jù)遠(yuǎn)程讀寫到influxdb的地址,默認(rèn)為本地讀寫 remote_write: 127.0.0.1:8090 # 遠(yuǎn)程寫 remote_read: 127.0.0.1:8090
prometheus的配置中,最常用的就是scrape_configs配置,比如添加新的監(jiān)控項(xiàng),修改原有監(jiān)控項(xiàng)的地址頻率等。
最簡單配置為:
scrape_configs: - job_name: prometheus metrics_path: /metrics scheme: http static_configs: - targets: - localhost:9090
完整配置為(附prometheus-operator的推薦配置):
# job 將以標(biāo)簽形式出現(xiàn)在指標(biāo)數(shù)據(jù)中,如node-exporter采集的數(shù)據(jù),job=node-exporter job_name: node-exporter # 采集頻率:30s scrape_interval: 30s # 采集超時(shí):10s scrape_timeout: 10s # 采集對象的path路徑 metrics_path: /metrics # 采集協(xié)議:http或者h(yuǎn)ttps scheme: https # 可選的采集url的參數(shù) params: name: demo # 當(dāng)自定義label和采集到的自帶label沖突時(shí)的處理方式,默認(rèn)沖突時(shí)會(huì)重名為exported_xx honor_labels: false # 當(dāng)采集對象需要鑒權(quán)才能獲取時(shí),配置賬號密碼等信息 basic_auth: username: admin password: admin password_file: /etc/pwd # bearer_token或者文件位置(OAuth 2.0鑒權(quán)) bearer_token: kferkhjktdgjwkgkrwg bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token # https的配置,如跳過認(rèn)證,或配置證書文件 tls_config: # insecure_skip_verify: true ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt server_name: kubernetes insecure_skip_verify: false # 代理地址 proxy_url: 127.9.9.0:9999 # Azure的服務(wù)發(fā)現(xiàn)配置 azure_sd_configs: # Consul的服務(wù)發(fā)現(xiàn)配置 consul_sd_configs: # DNS的服務(wù)發(fā)現(xiàn)配置 dns_sd_configs: # EC2的服務(wù)發(fā)現(xiàn)配置 ec2_sd_configs: # OpenStack的服務(wù)發(fā)現(xiàn)配置 openstack_sd_configs: # file的服務(wù)發(fā)現(xiàn)配置 file_sd_configs: # GCE的服務(wù)發(fā)現(xiàn)配置 gce_sd_configs: # Marathon的服務(wù)發(fā)現(xiàn)配置 marathon_sd_configs: # AirBnB的服務(wù)發(fā)現(xiàn)配置 nerve_sd_configs: # Zookeeper的服務(wù)發(fā)現(xiàn)配置 serverset_sd_configs: # Triton的服務(wù)發(fā)現(xiàn)配置 triton_sd_configs: # Kubernetes的服務(wù)發(fā)現(xiàn)配置 kubernetes_sd_configs: - role: endpoints namespaces: names: - monitoring # 對采集對象進(jìn)行一些靜態(tài)配置,如打特定的標(biāo)簽 static_configs: - targets: ["localhost:9090", "localhost:9191"] labels: my: label your: label # 在Prometheus采集數(shù)據(jù)之前,通過Target實(shí)例的Metadata信息,動(dòng)態(tài)重新寫入Label的值。 如將原始的__meta_kubernetes_namespace直接寫成namespace,簡潔明了 relabel_configs: - source_labels: [__meta_kubernetes_namespace] separator: ; regex: (.*) target_label: namespace replacement: $1 action: replace - source_labels: [__meta_kubernetes_service_name] separator: ; regex: (.*) target_label: service replacement: $1 action: replace - source_labels: [__meta_kubernetes_pod_name] separator: ; regex: (.*) target_label: pod replacement: $1 action: replace - source_labels: [__meta_kubernetes_service_name] separator: ; regex: (.*) target_label: job replacement: ${1} action: replace - separator: ; regex: (.*) target_label: endpoint replacement: web action: replace # 指標(biāo)relabel的配置,如丟掉某些無用的指標(biāo) metric_relabel_configs: - source_labels: [__name__] separator: ; regex: etcd_(debugging|disk|request|server).* replacement: $1 action: drop # 限制最大采集樣本數(shù),超過了采集將會(huì)失敗,默認(rèn)為0不限制 sample_limit: 0三. 服務(wù)發(fā)現(xiàn)
上邊的配置文件中,有很多*_sd_configs的配置,如kubernetes_sd_configs,就是用于服務(wù)發(fā)現(xiàn)的采集配置。
支持的服務(wù)發(fā)現(xiàn)類型:
// prometheus/discovery/config/config.go type ServiceDiscoveryConfig struct { StaticConfigs []*targetgroup.Group `yaml:"static_configs,omitempty"` DNSSDConfigs []*dns.SDConfig `yaml:"dns_sd_configs,omitempty"` FileSDConfigs []*file.SDConfig `yaml:"file_sd_configs,omitempty"` ConsulSDConfigs []*consul.SDConfig `yaml:"consul_sd_configs,omitempty"` ServersetSDConfigs []*zookeeper.ServersetSDConfig `yaml:"serverset_sd_configs,omitempty"` NerveSDConfigs []*zookeeper.NerveSDConfig `yaml:"nerve_sd_configs,omitempty"` MarathonSDConfigs []*marathon.SDConfig `yaml:"marathon_sd_configs,omitempty"` KubernetesSDConfigs []*kubernetes.SDConfig `yaml:"kubernetes_sd_configs,omitempty"` GCESDConfigs []*gce.SDConfig `yaml:"gce_sd_configs,omitempty"` EC2SDConfigs []*ec2.SDConfig `yaml:"ec2_sd_configs,omitempty"` OpenstackSDConfigs []*openstack.SDConfig `yaml:"openstack_sd_configs,omitempty"` AzureSDConfigs []*azure.SDConfig `yaml:"azure_sd_configs,omitempty"` TritonSDConfigs []*triton.SDConfig `yaml:"triton_sd_configs,omitempty"` }
因?yàn)閜rometheus采用的是pull方式來拉取監(jiān)控?cái)?shù)據(jù),這種方式需要由server側(cè)決定采集的目標(biāo)有哪些,即配置在scrape_configs中的各種job,pull方式的主要缺點(diǎn)就是無法動(dòng)態(tài)感知新服務(wù)的加入,因此大多數(shù)監(jiān)控都默認(rèn)支持服務(wù)發(fā)現(xiàn)機(jī)制,自動(dòng)發(fā)現(xiàn)集群中的新端點(diǎn),并加入到配置中。
Prometheus支持多種服務(wù)發(fā)現(xiàn)機(jī)制:文件,DNS,Consul,Kubernetes,OpenStack,EC2等等。基于服務(wù)發(fā)現(xiàn)的過程并不復(fù)雜,通過第三方提供的接口,Prometheus查詢到需要監(jiān)控的Target列表,然后輪詢這些Target獲取監(jiān)控?cái)?shù)據(jù)。
對于kubernetes而言,Promethues通過與Kubernetes API交互,然后輪詢資源端點(diǎn)。目前主要支持5種服務(wù)發(fā)現(xiàn)模式,分別是:Node、Service、Pod、Endpoints、Ingress。對應(yīng)配置文件中的role: node/role:service
如:動(dòng)態(tài)獲取所有節(jié)點(diǎn)node的信息,可以添加如下配置:
- job_name: kubernetes-nodes scrape_interval: 1m scrape_timeout: 10s metrics_path: /metrics scheme: https kubernetes_sd_configs: - api_server: null role: node namespaces: names: [] bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token tls_config: ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt insecure_skip_verify: true relabel_configs: - separator: ; regex: __meta_kubernetes_node_label_(.+) replacement: $1 action: labelmap - separator: ; regex: (.*) target_label: __address__ replacement: kubernetes.default.svc:443 action: replace - source_labels: [__meta_kubernetes_node_name] separator: ; regex: (.+) target_label: __metrics_path__ replacement: /api/v1/nodes/${1}/proxy/metrics action: replace
就可以在target中看到具體內(nèi)容
對應(yīng)的service、pod也是同樣的方式。
需要注意的是,為了能夠讓Prometheus能夠訪問收到Kubernetes API,我們要對Prometheus進(jìn)行訪問授權(quán),即serviceaccount。否則就算配置了,也沒有權(quán)限獲取。
prometheus的權(quán)限配置是一組ClusterRole+ClusterRoleBinding+ServiceAccount,然后在deployment或statefulset中指定serviceaccount。
ClusterRole.yaml
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: namespace: kube-system name: prometheus rules: - apiGroups: [""] resources: - configmaps - secrets - nodes - pods - nodes/proxy - services - resourcequotas - replicationcontrollers - limitranges - persistentvolumeclaims - persistentvolumes - namespaces - endpoints verbs: ["get", "list", "watch"] - apiGroups: ["extensions"] resources: - daemonsets - deployments - replicasets - ingresses verbs: ["get", "list", "watch"] - apiGroups: ["apps"] resources: - daemonsets - deployments - replicasets - statefulsets verbs: ["get", "list", "watch"] - apiGroups: ["batch"] resources: - cronjobs - jobs verbs: ["get", "list", "watch"] - apiGroups: ["autoscaling"] resources: - horizontalpodautoscalers verbs: ["get", "list", "watch"] - apiGroups: ["policy"] resources: - poddisruptionbudgets verbs: ["get", list", "watch"] - nonResourceURLs: ["/metrics"] verbs: ["get"]
ClusterRoleBinding.yaml
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: namespace: kube-system name: prometheus roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: prometheus subjects: - kind: ServiceAccount name: prometheus namespace: kube-system
ServiceAccount.yaml
apiVersion: v1 kind: ServiceAccount metadata: namespace: kube-system name: prometheus
prometheus.yaml
.... spec: serviceAccountName: prometheus ....
完整的kubernete的配置如下:
- job_name: kubernetes-apiservers scrape_interval: 1m scrape_timeout: 10s metrics_path: /metrics scheme: https kubernetes_sd_configs: - api_server: null role: endpoints namespaces: names: [] bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token tls_config: ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt insecure_skip_verify: true relabel_configs: - source_labels: [__meta_kubernetes_namespace, __meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name] separator: ; regex: default;kubernetes;https replacement: $1 action: keep - job_name: kubernetes-nodes scrape_interval: 1m scrape_timeout: 10s metrics_path: /metrics scheme: https kubernetes_sd_configs: - api_server: null role: node namespaces: names: [] bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token tls_config: ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt insecure_skip_verify: true relabel_configs: - separator: ; regex: __meta_kubernetes_node_label_(.+) replacement: $1 action: labelmap - separator: ; regex: (.*) target_label: __address__ replacement: kubernetes.default.svc:443 action: replace - source_labels: [__meta_kubernetes_node_name] separator: ; regex: (.+) target_label: __metrics_path__ replacement: /api/v1/nodes/${1}/proxy/metrics action: replace - job_name: kubernetes-cadvisor scrape_interval: 1m scrape_timeout: 10s metrics_path: /metrics scheme: https kubernetes_sd_configs: - api_server: null role: node namespaces: names: [] bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token tls_config: ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt insecure_skip_verify: false relabel_configs: - separator: ; regex: __meta_kubernetes_node_label_(.+) replacement: $1 action: labelmap - separator: ; regex: (.*) target_label: __address__ replacement: kubernetes.default.svc:443 action: replace - source_labels: [__meta_kubernetes_node_name] separator: ; regex: (.+) target_label: __metrics_path__ replacement: /api/v1/nodes/${1}/proxy/metrics/cadvisor action: replace - job_name: kubernetes-service-endpoints scrape_interval: 1m scrape_timeout: 10s metrics_path: /metrics scheme: http kubernetes_sd_configs: - api_server: null role: endpoints namespaces: names: [] relabel_configs: - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scrape] separator: ; regex: "true" replacement: $1 action: keep - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scheme] separator: ; regex: (https?) target_label: __scheme__ replacement: $1 action: replace - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_path] separator: ; regex: (.+) target_label: __metrics_path__ replacement: $1 action: replace - source_labels: [__address__, __meta_kubernetes_service_annotation_prometheus_io_port] separator: ; regex: ([^:]+)(?::d+)?;(d+) target_label: __address__ replacement: $1:$2 action: replace - separator: ; regex: __meta_kubernetes_service_label_(.+) replacement: $1 action: labelmap - source_labels: [__meta_kubernetes_namespace] separator: ; regex: (.*) target_label: kubernetes_namespace replacement: $1 action: replace - source_labels: [__meta_kubernetes_service_name] separator: ; regex: (.*) target_label: kubernetes_name replacement: $1 action: replace
配置成功后,對應(yīng)的target是:
四. 常見場景1.獲取集群中各節(jié)點(diǎn)信息,并按可用區(qū)或地域分類
如使用k8s的role:node采集集群中node的數(shù)據(jù),可以通過"meta_domain_beta_kubernetes_io_zone"標(biāo)簽來獲取到該節(jié)點(diǎn)的地域,該label為集群創(chuàng)建時(shí)為node打上的標(biāo)記,kubectl decribe node可以看到。
然后可以通過relabel_configs定義新的值
relabel_configs: - source_labels: ["meta_domain_beta_kubernetes_io_zone"] regex: "(.*)" replacement: $1 action: replace target_label: "zone"
后面可以直接通過node{zone="XX"}來進(jìn)行地域篩選
2.過濾信息,或者按照職能(RD、運(yùn)維)進(jìn)行監(jiān)控管理
對于不同職能(開發(fā)、測試、運(yùn)維)的人員可能只關(guān)心其中一部分的監(jiān)控?cái)?shù)據(jù),他們可能各自部署的自己的Prometheus Server用于監(jiān)控自己關(guān)心的指標(biāo)數(shù)據(jù),不必要的數(shù)據(jù)需要過濾掉,以免浪費(fèi)資源,可以最類似配置;
metric_relabel_configs: - source_labels: [__name__] separator: ; regex: etcd_(debugging|disk|request|server).* replacement: $1 action: drop
action: drop代表丟棄掉符合條件的指標(biāo),不進(jìn)行采集。
3.搭建prometheus聯(lián)邦集群,管理各IDC(地域)監(jiān)控實(shí)例
如果存在多個(gè)地域,每個(gè)地域又有很多節(jié)點(diǎn)或者集群,可以采用默認(rèn)的聯(lián)邦集群部署,每個(gè)地域部署自己的prometheus server實(shí)例,采集自己地域的數(shù)據(jù)。然后由統(tǒng)一的server采集所有地域數(shù)據(jù),進(jìn)行統(tǒng)一展示,并按照地域歸類
配置:
scrape_configs: - job_name: "federate" scrape_interval: 15s honor_labels: true metrics_path: "/federate" params: "match[]": - "{job="prometheus"}" - "{__name__=~"job:.*"}" - "{__name__=~"node.*"}" static_configs: - targets: - "192.168.77.11:9090" - "192.168.77.12:9090"
本文為容器監(jiān)控實(shí)踐系列文章,完整內(nèi)容見:container-monitor-book
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/32896.html
摘要:根據(jù)配置文件,對接收到的警報(bào)進(jìn)行處理,發(fā)出告警。在默認(rèn)情況下,用戶只需要部署多套,采集相同的即可實(shí)現(xiàn)基本的。通過將監(jiān)控與數(shù)據(jù)分離,能夠更好地進(jìn)行彈性擴(kuò)展。參考文檔本文為容器監(jiān)控實(shí)踐系列文章,完整內(nèi)容見 系統(tǒng)架構(gòu)圖 1.x版本的Prometheus的架構(gòu)圖為:showImg(https://segmentfault.com/img/remote/1460000018372350?w=14...
摘要:根據(jù)配置文件,對接收到的警報(bào)進(jìn)行處理,發(fā)出告警。在默認(rèn)情況下,用戶只需要部署多套,采集相同的即可實(shí)現(xiàn)基本的。通過將監(jiān)控與數(shù)據(jù)分離,能夠更好地進(jìn)行彈性擴(kuò)展。參考文檔本文為容器監(jiān)控實(shí)踐系列文章,完整內(nèi)容見 系統(tǒng)架構(gòu)圖 1.x版本的Prometheus的架構(gòu)圖為:showImg(https://segmentfault.com/img/remote/1460000018372350?w=14...
摘要:同時(shí)有權(quán)限控制日志審計(jì)整體配置過期時(shí)間等功能。將成為趨勢前置條件要求的版本應(yīng)該是因?yàn)楹椭С值南拗频暮诵乃枷胧菍⒌牟渴鹋c它監(jiān)控的對象的配置分離,做到部署與監(jiān)控對象的配置分離之后,就可以輕松實(shí)現(xiàn)動(dòng)態(tài)配置。 一.單獨(dú)部署 二進(jìn)制安裝各版本下載地址:https://prometheus.io/download/ Docker運(yùn)行 運(yùn)行命令:docker run --name promet...
摘要:一概述的配置可以用命令行參數(shù)或者配置文件,如果是在集群內(nèi),一般配置在中以下均為版本查看可用的命令行參數(shù),可以執(zhí)行也可以指定對應(yīng)的配置文件,參數(shù)一般為如果配置有修改,如增添采集,可以重新加載它的配置。目前主要支持種服務(wù)發(fā)現(xiàn)模式,分別是。 本文將分析Prometheus的常見配置與服務(wù)發(fā)現(xiàn),分為概述、配置詳解、服務(wù)發(fā)現(xiàn)、常見場景四個(gè)部分進(jìn)行講解。 一. 概述 Prometheus的配置可以...
摘要:宋體本文從拉勾網(wǎng)的業(yè)務(wù)架構(gòu)日志采集監(jiān)控服務(wù)暴露調(diào)用等方面介紹了其基于的容器化改造實(shí)踐。宋體此外,拉勾網(wǎng)還有一套自研的環(huán)境的業(yè)務(wù)發(fā)布系統(tǒng),不過這套發(fā)布系統(tǒng)未適配容器環(huán)境。寫在前面 拉勾網(wǎng)于 2019 年 3 月份開始嘗試將生產(chǎn)環(huán)境的業(yè)務(wù)從 UHost 遷移到 UK8S,截至 2019 年 9 月份,QA 環(huán)境的大部分業(yè)務(wù)模塊已經(jīng)完成容器化改造,生產(chǎn)環(huán)境中,后臺管理服務(wù)已全部遷移到 UK8...
閱讀 2954·2021-11-17 09:33
閱讀 3118·2021-11-16 11:52
閱讀 482·2021-09-26 09:55
閱讀 2975·2019-08-30 15:52
閱讀 1313·2019-08-30 15:44
閱讀 1257·2019-08-30 13:59
閱讀 796·2019-08-30 13:08
閱讀 1157·2019-08-30 10:50