<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      .Net微服務實戰之可觀測性

      系列文章

      前言

      很多次去面試,有經驗的面試官都會問一個問題,你是怎么去定位日常遇到的問題?平常跟同行分享自己遇到的問題,事后他會問我,這種看起來毫無頭緒的問題,你是怎么去定位解決的?

      其實我們平常不知道怎么問題出在哪,主要是所了解的信息量不足,那么怎么才能提高給咱們定位問題的信息量呢?其實上面兩個問題的答案都是同一個:日志、指標、跟蹤

      有日志記錄才能清楚知道當前系統的運行狀況和具體問題;指標是給與后續做優化和定位偶發性問題的一些參考,沒指標參考就沒標準;我們平常做得多的調試、查看調用棧也是跟蹤的一種,但是在分布式時代,更多考量的是跨進程通信的調用鏈路。

      日志、指標、跟蹤三者結合起來有一種統稱——可觀測性

      運維是架構的地基,我第一次看到這句是在張輝清寫的《小團隊構建大網站:中小研發團隊架構實踐》,說實話,我非常的認同。不少小團隊的運維都是由開發兼職的,而團隊的運維能力決定了日后架構選型與日常維護。有良好的運維監控體系,就有足夠的信息量提供給開發人員進行定位排錯。

      可觀測性

      可觀測性的意思是可以由系統的外部輸出推斷其內部狀態的程度,在軟件系統中,可觀察性是指能夠收集有關程序執行、模塊內部狀態以及組件之間通信的數據。分別由三個方向組成:日志(logging)、跟蹤( tracing)、指標(Metrics)Metrics, tracing, and logging

      日志(logging)

      日志的定義特征是它記錄離散事件,目的是通過這些記錄后分析出程序的行為。

      例如:應用程序調試或錯誤消息通過轉換文件描述,通過 syslog 發送到 Elasticsearch審計跟蹤事件通過 Kafka 推送到 BigTable 等數據存儲;或從服務調用中提取并發送到錯誤跟蹤服務(如 NewRelic)的特定于請求的元數據。

      跟蹤( tracing)

      跟蹤的定義特征是它處理請求范圍內的信息,目的是排查故障。

      在系統中執行的單個事務對象生命周期里,所綁定的數據或元數據。例如:RPC遠程服務調用的持續時間;請求到數據庫的實際 SQL 查詢語句;HTTP 請求入站的關聯 ID。

      指標(Metrics)

      指標的定義特征是它們是可聚合的,目的是監控和預警。

      這些指標在一段時間內,能組成單個邏輯儀表、計數器或直方圖。例如:隊列的當前長度可以被建模為一個量規;HTTP 請求的數量可以建模為一個計數器,更新后通過簡單的加法聚合計算;并且可以將觀察到的請求持續時間建模為直方圖,更新匯總到某個時間段中并建立統計摘要。

      代表性產品

      日志(logging)基本上是ELK (ElasticSearch, Logstash, Kibana) 技術棧一家獨大了,但是Logstash比較重量級的,而輕量級的Filebeat可能更加受大家的青睞。下文里的實戰部分,我是以EFK(ElasticSearch, Filebeat, Kibana)演示。

      跟蹤( tracing)相比于日志就是百花齊放了,Skywalking、zipkin、鷹眼、jeager、Datadog等等……但是在.Net的技術棧里,能提供出SDK的相對會少,所以選擇也會少一些,我在之前的實戰和下文的演示都是用Skywalking,主要優勢無侵入。

      指標(Metrics)在云生時代Prometheus比Zabbix更加受大家歡迎,同時Prometheus社區活躍度也占非常大的優勢。下文實戰部分我以Prometheus 作為演示。

      ElasticSearch部署與安裝

      后面的Skywaking和日志都需要用到ElasticSearch,所以我把部署流程優先提了出來。

      導入 GPG key

      rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

      添加源

      vim /etc/yum.repos.d/elasticsearch.repo
      [elasticsearch]
      name=Elasticsearch repository for 7.x packages
      baseurl=https://artifacts.elastic.co/packages/7.x/yum
      gpgcheck=1
      gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
      enabled=0
      autorefresh=1
      type=rpm-md

      重新加載

      yum makecache

      安裝

      sudo yum install -y --enablerepo=elasticsearch elasticsearch

      修改配置

      vim /etc/elasticsearch/elasticsearch.yml
      network.host: 0.0.0.0
      
      discovery.type: single-node

      啟動

      /sbin/chkconfig --add elasticsearch
      
      sudo -i service elasticsearch start
      systemctl enable elasticsearch.service

      用瀏覽器訪問,能出現下圖就是可以了

      Prometheus與Grafana實現指標

      架構簡析

      核心組件

      Prometheus server

      Prometheus的主程序,本身也是一個時序數據庫,它來負責整個監控集群的數據拉取、處理、計算和存儲,是使用pull方式由服務端主動拉取監控數據。

      Alertmanager

      Prometheus的告警組件,負責整個集群的告警發送、分組、調度、警告抑制等功能。 需要知道的是alertmanager本身是不做告警規則計算的,簡單來說就是,alertmanager不去計算當前的監控取值是否達到我設定的閾值,上面已經提過該部分規則計算是prometheus server來計算的,alertmanager監聽prometheus server發來的消息,然后在結合自己的配置,比如等待周期,重復發送告警時間,路由匹配等配置項,然后把接收到的消息發送到指定的接收者。同時他還支持多種告警接收方式,常見的如郵件、企業微信、釘釘等。1.3

      Pushgateway

      Pushgateway 它是prometheus的一個中間網管組件,類似于zabbix的zabbix-proxy。它主要解決的問題是一些不支持pull方式獲取數據的場景,比如:自定義shell腳本來監控服務的健康狀態,這個就沒辦法直接讓prometheus來拉數據,這時就可以借助pushgateway,它是支持推送數據的,我們可以把對應的數據按照prometheus的格式推送到pushgateway,然后配置prometheus server拉取pushgateway即可。

      UI 

      Grafana、prometheus-ui是用來圖形化展示數據的組件,其中prometheus-ui是prometheus項目原生的ui界面,但是在數據展示方面不太好用,因此推薦grafana來展示你的數據,grafana支持prometheus的PromQL語法,能夠和prometheus數據庫交互,加上grafana強大的ui功能,我們可以很輕松的獲取到很多好看的界面,同時也有很多做好的模版可以使用。

      Prometheus Target

      采集指標的API,有不同的Exporter,如果redis、mysql、server nodel提供給Prometheus server定時pull數據到數據庫。

      安裝Prometheus

      mkdir /var/prometheus
      docker run -d --name=prometheus -p 9090:9090 prom/prometheus
      docker cp prometheus:/etc/prometheus/prometheus.yml /var/prometheus/
      刪除之前的容器
      docker run -d --name=prometheus -p 9090:9090 -v /var/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus

      到瀏覽器輸入地址訪問,出現以下頁面則成功

       

      安裝Grafana

      docker run -d --name=grafana -p 3000:3000 grafana/grafana

      安裝完成后,使用admin/admin登錄

      安裝Node Exporter

      docker run -d -p 9100:9100 \
        -v "/proc:/host/proc:ro" \
        -v "/sys:/host/sys:ro" \
        -v "/:/rootfs:ro" \
        --net="host" \
        --restart always \
        prom/node-exporter

      到瀏覽器輸入地址訪問(http://192.168.184.129:9100/metrics),出現以下頁面則成功

      配置Prometheus

      vim /var/prometheus/prometheus.yml

      添加以下配置 (注意格式)

        - job_name: service-a
          static_configs:
            - targets: ["192.168.88.138:9100"]
              labels:
                instance: node
        - job_name: service-b
          static_configs:
            - targets: ["192.168.88.146:9100"]
              labels:
                instance: node
        - job_name: service-c
          static_configs:
            - targets: ["192.168.88.144:9100"]
              labels:
                instance: node
      重新啟動Prometheus,打開瀏覽器可以見下圖

      配置Grafana

      添加數據源

      導入模板,其他模板可以到 https://grafana.com/grafana/dashboards 查看

       確認后則生成(注意修改主機名)

       

      到這里完整的一次監控就完成,我們可以根據上訴的步驟添加容器和docker的監控。

      使用Docker Exporter監控容器

      用docker進行安裝

      docker run --name docker_exporter --detach --restart always --volume "/var/run/docker.sock":"/var/run/docker.sock" --publish 9417:9417 prometheusnet/docker_exporter

      在Prometheus進行配置,添加下面配置項

      vim /var/prometheus/prometheus.yml
      - job_name: "container"
          static_configs:
            - targets: ["192.168.88.138:9417"]

      在grafana根據上面node-exporter的步驟進行導入對應的模板 https://grafana.com/grafana/dashboards/11467

      使用docker metrics 監控docker

      開啟metrics

      vim  /etc/docker/daemon.json
      {
        "metrics-addr" : "192.168.88.146:9323",
        "experimental" : true
      }

      重啟docker

      systemctl daemon-reload
      service docker restart

      配置Prometheus

      - job_name: "docker"
          static_configs:
            - targets: ["192.168.88.138:9323", "192.168.88.146:9323", "192.168.88.146:9323"]

      導入模板https://grafana.com/grafana/dashboards/1229

      SkyWalking實現跟蹤

      架構簡析

      核心組件

      Skywalking OAP Server

      Skywalking收集器,接受寫入請求與UI數據查詢。

      Skywalking UI

      有調用鏈路記錄、網絡拓撲圖、性能指標展示等。

      Skywalking客戶端代理

      提供了多種語言的SDK(Java, .NET Core, NodeJS, PHP,  Python等),在應用程序進行網絡請求的時候進行埋點攔截,整理成需要的指標發送到Skywalking OAP Server,

      安裝SkyWalking的收集器

      docker run --name skywalking-oap-server  -p 12800:12800 -p 11800:11800 -p 1234:1234 --restart always -d -e SW_STORAGE=elasticsearch7 -e SW_STORAGE_ES_CLUSTER_NODES=192.168.184.129:9200 apache/skywalking-oap-server:8.4.0-es7

      啟動成功后去ES查看,多了很多的Index

      安裝SkyWalking UI

      docker run --name skywalking-ui -p 8888:8080 --restart always -d -e SW_OAP_ADDRESS=192.168.184.129:12800 apache/skywalking-ui:8.4.0

      使用時注意調整右下角的時區

       我們到Github下載源碼 https://github.com/SkyAPM/SkyAPM-dotnet,根據how-to-build文檔進行編譯

      - Prepare git and .NET Core SDK.
      - `git clone https://github.com/SkyAPM/SkyAPM-dotnet.git`
      - `cd SkyAPM-dotnet/`
      - Switch to the tag by using `git checkout [tagname]` (Optional, switch if want to build a release from source codes)
      - `git submodule init`
      - `git submodule update`
      - Run `dotnet restore`
      - Run `dotnet build src/SkyApm.Transport.Grpc.Protocol`
      - Run `dotnet build skyapm-dotnet.sln`

      啟動SkyApm.Sample.Frontend與SkyApm.Sample.Backend兩個項目,瀏覽器訪問http://localhost:5001/api/values/postin ,就可以見到下面的調用鏈了。

      我在19年的時候使用0.9版本,http.request_body和http.response_body都是沒記錄需要自己擴展,而現在最新版已經有記錄,省了不少的事。

      EFK(ElasticSearch+Filebeat+Kibana)實現日志

      安裝Nginx

      主要用來測試的

      添加源
      rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

      安裝

      yum install -y nginx
      修改配置
      vim /etc/nginx/nginx.conf

      把圈起來的配置改動一下

      log_format  json  '{"@timestamp":"$time_iso8601",'
          '"host": "$server_addr",'
          '"clientip": "$remote_addr",'
          '"request_body": "$request_body",'
          '"responsetime": $request_time,'
          '"upstreamtime": "$upstream_response_time",'
          '"upstreamhost": "$upstream_addr",'
          '"http_host": "$host",'
          '"url": "$uri",'
          '"referer": "$http_referer",'
          '"agent": "$http_user_agent",'
          '"status": "$status"}';
      access_log
      /var/log/nginx/access.log json;
      開機啟動
      systemctl start nginx.service
      systemctl enable nginx.service

      用瀏覽器訪問,刷新幾次,執行cat /var/log/nginx/access.log 就可以看到json格式的日志了

      安裝Filebeat

      導入安裝源

      sudo rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch
      vim /etc/yum.repos.d/elastic.repo

      保存下面文案

      [elastic-7.x]
      name=Elastic repository for 7.x packages
      baseurl=https://artifacts.elastic.co/packages/7.x/yum
      gpgcheck=1
      gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
      enabled=1
      autorefresh=1
      type=rpm-md

      執行安裝指令

      yum install -y filebeat

      添加配置

      vim /etc/filebeat/filebeat.yml
      filebeat.inputs:
        - type: log
          enabled: true
          paths:
            - /var/log/nginx/access.log
          json.key_under_root: true
          json.overwrite_keys: true
          json.message_key: log
          tags: ["nginx-access"]
        - type: log
          enabled: true
          paths:
            - /var/log/nginx/error.log
          json.key_under_root: true
          json.overwrite_keys: true
          json.message_key: log
          tags: ["nginx-error"]
      filebeat.config.modules:
        path: ${path.config}/modules.d/*.yml
        reload.enabled: false
      setup.ilm.enabled: false
      setup.template:
        name: "nginx"
        pattern: "nginx-*"
      setup.template.overwrite: true
      setup.template.enabled: false
      output.elasticsearch:
        hosts: ["192.168.184.129:9200"]
        indices:
          - index: "nginx-access-%{+yyyy.MM.dd}"
            when.contains:
              tags: "nginx-access"
          - index: "nginx-error-%{+yyyy.MM.dd}"
            when.contains:
              tags: "nginx-error"
      

      啟動

      systemctl start filebeat 
      systemctl enable filebeat

       安裝kibana

      docker run --name kibana -d -p 5601:5601 kibana:7.7.0
      mkdir /var/kibana
      docker cp kibana:/usr/share/kibana/config /var/kibana/config

      刪除之前的容器再安裝一次

      docker run --name kibana -d -v /var/kibana/config:/usr/share/kibana/config -p 5601:5601 kibana:7.7.0

      修改配置后,重啟容器

      vim /var/kibana/config/kibana.yml

       打開瀏覽器訪問

      創建索引,填寫nginx-access-*

      最后的展示UI

      .Net的日志同樣可以使用Json保存,然后通過Filebeat進行采集。

      結束

      本篇文章是我之前實現微服務的時的運維的技術棧,如果有什么問題與建議,可以給在評論區反饋給我。

      posted @ 2021-09-29 16:12  陳珙  閱讀(5438)  評論(11)    收藏  舉報
      主站蜘蛛池模板: 一区二区三区av天堂| 亚洲综合久久精品国产高清| A毛片终身免费观看网站| 福利网午夜视频一区二区| 熟妇人妻无码中文字幕老熟妇| 亚洲欧洲av一区二区| 国产精品不卡一二三区| 国产成人精品2021欧美日韩| 99久久国产综合精品成人影院| 人人做人人澡人人人爽| 丁香五月婷激情综合第九色| 国产精品天天狠天天看| 东京热高清无码精品| 国内精品自国内精品自久久| 野外少妇被弄到喷水在线观看| 行唐县| 国产一区二区三区在线观看免费| 99riav精品免费视频观看| 精品人妻日韩中文字幕| 狠狠色丁香婷婷久久综合五月| 四虎永久精品免费视频| 国产无套内射又大又猛又粗又爽| 亚洲精品午夜国产VA久久成人 | 国产亚洲精品自在久久vr| 成人自拍短视频午夜福利| 女人扒开的小泬高潮喷小| 亚洲 日本 欧洲 欧美 视频 | 中文字幕成人精品久久不卡| 五月综合激情婷婷六月| 欧美国产成人精品二区芒果视频| 灌云县| 中文字幕一区二区三区久久蜜桃| 亚洲熟女精品一区二区| 华安县| 欧美老熟妇乱子伦牲交视频| 国产成人乱色伦区| 欧美大bbbb流白水| 国产精品国产三级国产午| chinese性内射高清国产| 最新亚洲人成网站在线影院| 中文字幕乱偷无码av先锋蜜桃|