標籤: USB CONNECTOR

  • 這台後驅SUV只要5萬多,而且還是大廠出品

    這台後驅SUV只要5萬多,而且還是大廠出品

    實際動力表現來看,這副發動機的低扭會略有不足,在2000轉時感覺動力並不是很充沛,上到3000轉以後動力會有所改善。不過,這種小排量發動機最大的問題就是後勁不足,上到100km/h之後就很難有什麼作為。底盤表現幻速S2的前懸架使用麥弗遜式獨立懸架,而後懸架為五連桿式非獨立懸架。

    各個級別的SUV市場早已進入百家爭鳴的狀態,小型SUV市場更是如此,各路廠商都會使出渾身解數想搶佔這個市場,北汽也不例外。它們旗下的幻速S2可以說是一款重要產品,下面編者我就給大家分析一下幻速S2。

    之所以要寫幻速S2是因為熱門的小型SUV大家已聽了不少,而幻速S2這種中規中矩的產品大家可能了解較少,但銷量並不能很好地反應出其真實產品力,因此編者我想給大家好好科普一下。

    北汽銀翔-北汽幻速S2

    指導價:5.18-6.08萬

    外觀設計

    幻速S2的車身尺寸為4250*1730*1735mm,軸距為2560mm。從前臉看,引擎蓋上由兩側向中間匯聚的凹線讓前臉有個很好的中心感。兩側向側面上揚的大燈組,看起來有一點點關二哥的威武感。

    側面來看,車身顯得較為緊湊,門把手上方的腰線讓側面不至於過於單調。不過,輪胎的尺寸略微偏小。

    後方來看,備胎外漏的設計野性十足,地台的高度較低,容易裝卸貨物。整個尾部給人一種方正厚實的感覺。

    內飾設計

    中控台的設計相當平庸也符合這個價位應有的水平,不過布局還是比較整齊,上手難度不高。擋把上的烤黑鋼琴漆帶來一絲亮點。

    動力總成

    幻速S2搭載了1.5L自然吸氣發動機+5擋手動變速箱,最大輸出113馬力和150牛米。實際動力表現來看,這副發動機的低扭會略有不足,在2000轉時感覺動力並不是很充沛,上到3000轉以後動力會有所改善。不過,這種小排量發動機最大的問題就是後勁不足,上到100km/h之後就很難有什麼作為。

    底盤表現

    幻速S2的前懸架使用麥弗遜式獨立懸架,而後懸架為五連桿式非獨立懸架。具體表現來看,幻速S2的底盤會偏硬一些,對震動的過濾並不是很到位,尤其面對連續震動會有點應付不過來。

    乘坐空間

    SUV在空間表現中會有一定的優勢,幻速S2也不例外。身高175cm的體驗者坐於後排,能有兩拳左右的腿部空間和4指左右的頭部空間,這個表現還是不錯的。

    由於幻速S2是一款后驅車,所以它的後排中央拱起有點高,對乘坐有點影響,同時後排中央也缺乏頭枕,看來對後排中央的乘客並不友好。

    油耗與保養費用

    多位車主反映的幻速S2百公里綜合油耗為8.3L,對於它這個級別的產品來說,還是有一點點偏高。

    保養費用方面,幻速S2的6萬公里總保養費用為4914元,其中更換機油機濾的價格為220元,這個價錢還是比較實惠的。

    配置分析

    幻速S2總共有8個車型可以買,但是只有4個版本,每個版本都有國四和國五的車型,這點要注意。

    經過分析,我推薦買指導價為5.78萬的手動舒適型,這也是次低配的車型。因為它雖然比最低配貴了5000元,但是多了副駕駛安全氣囊、車頂行李架、倒車雷達、后視鏡電動調節和后雨刷。這堆配置之中,我覺得最重要的是副駕駛安全氣囊,這也是給家人朋友的一個保障。

    編者總結:

    幻速S2是小型SUV中少有的后驅車型,所以它的操控性會好一點,前輪胎的磨損也不會那麼快。如果你有一個后驅夢,而預算又正好卡在這個區間,何不買台幻速S2。本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    ※為什麼 USB CONNECTOR 是電子產業重要的元件?

    網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

    ※台北網頁設計公司全省服務真心推薦

    ※想知道最厲害的網頁設計公司"嚨底家"!

    ※推薦評價好的iphone維修中心

    網頁設計最專業,超強功能平台可客製化

    ※別再煩惱如何寫文案,掌握八大原則!

  • 務實之選 二十來萬的合資SUV有啥好選擇?

    務實之選 二十來萬的合資SUV有啥好選擇?

    標緻4008的內飾採用了飛航式設計理念,飛機推桿式的檔把和撥片式的功能鍵顯得頗為新穎,小尺寸方向盤給人以一種很強烈的戰鬥氣息。350THp車型搭載的是一台1。6T渦輪增壓發動機,最大馬力167匹,峰值扭矩245牛米,傳動系統也是一款6AT手自一體變速箱。

    做汽車編輯久了,總會碰到很多朋友問同一個問題,就是預算二十來萬,買一台合資SUV有啥好的車型?往往這個問題後面會帶上一句:不買日系車。

    在這個預算區間現在可以購買的合資SUV已經非常非常多,這次就根據小編個人所開過和感受過車型做一個推薦,前提是,今兒不說日系。

    操控至上—福特翼虎

    指導價格:19.38-27.58萬

    推薦車型:EcoBoost 180 兩驅豪翼型

    指導價格:22.98萬

    福特翼虎在更換了家族式盾型前臉之後確實顯得更加漂亮了,大嘴式的進氣格柵讓它有了更加威武的視覺效果,車身線條方正,車尾的銀色下護板和雙邊排氣管也體現出了一種運動氛圍。

    翼虎的內飾呈現環抱式設計,駕駛感受更接近一台轎車,而且有着良好的開車視野,車內座椅填充柔軟度適中,乘坐人員也不會顯得難受膈應。

    EcoBoost 180搭載的是一台1.5T的渦輪增壓發動機,最大馬力181匹,峰值扭矩240牛米,傳動系統使用的是福特自家的6AT手自一體變速箱。

    福特翼虎是二十萬級別裏面操控性能和運動感較好的一台SUV,轉向精準,動力儲備也很足,雖然1.5T的發動機在低扭時候感覺那麼一點拖沓,但是由於福特一貫將油門初段調校得較為敏感的特性,所以起步感覺並不會顯得太肉;而2000轉的時候會迎來扭矩爆發,加速超車稍微給油,翼虎的動力響應還是可以讓人滿意的類型。

    個性為先—標緻4008

    指導價格:18.57-23.37萬

    推薦車型:2017款 350THp豪華版

    指導價格:23.07萬

    標緻4008的外觀設計秉承了法系車天馬行空的創意,但卻比以往的標緻品牌車型要來的更加和諧,車身肌肉感很強烈,給人以一種比較明顯的力量感,不同於普通SUV使用相對方正的設計理念,標緻4008的外觀顯得流線型更加強烈,視覺效果更加時尚。

    標緻4008的內飾採用了飛航式設計理念,飛機推桿式的檔把和撥片式的功能鍵顯得頗為新穎,小尺寸方向盤給人以一種很強烈的戰鬥氣息。

    350THp車型搭載的是一台1.6T渦輪增壓發動機,最大馬力167匹,峰值扭矩245牛米,傳動系統也是一款6AT手自一體變速箱。

    標緻4008從外觀上說是一款非常個性前衛的SUV;標緻車型以往給人的感覺似乎一直與操控感和運動格調相關聯,但本次的標緻4008則更趨向於一台普羅大眾所理解的歐系SUV,底盤和懸挂調校偏向舒適,但扭矩爆發平台會來得比福特翼虎更早,1400轉就可以達到峰值扭矩,所以超車感覺還是相當暢快。

    均衡主義—現代途勝

    指導價格:15.99-23.99萬

    推薦車型:2015款 1.6T 雙離合四驅尊貴型

    指導價格:21.59萬

    途勝的外觀設計延續了現代集團的設計理念,細節之處還是比較個性的類型,但整體看上去比較中庸,從外觀上就給人一種比較溫柔的親和力形象。

    內飾的設計也是走的柔和路線,類似展翼的設計語言看上去比較溫馨,加之韓系車型血統,人機工程學的設計布局也十分符合我們中國消費者的使用習慣,溝通感比較優秀。

    動力層面途勝使用的1.6T發動機最大馬力177匹,峰值扭矩265牛米,傳動系統使用的是一套7速雙離合變速箱。

    途勝的性格是一款比較溫順好用的家用SUV,1.6T的動力平台也比較早,1500轉就可以輸出最大扭矩,雙離合變速箱也比較平順好用。車內布局也是非常舒適,從家用層面來說著實是一款不錯的SUV。

    全文總結:以上三款車,從家用務實的角度來看小編推薦的是現代途勝,韓系SUV一直都以比較舒適、平和的性格在市場上立足,而且定價不高,21萬出頭的價格可以購買四驅版本,這是歐美系同級別SUV難以企及的配置,有四驅,在泥濘爛路的信心也更加充足。本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能

    台北網頁設計公司這麼多該如何選擇?

    ※智慧手機時代的來臨,RWD網頁設計為架站首選

    ※評比南投搬家公司費用收費行情懶人包大公開

    ※回頭車貨運收費標準

    網頁設計最專業,超強功能平台可客製化

    ※別再煩惱如何寫文案,掌握八大原則!

  • 最新研究:大氣二氧化碳總量逼近1500萬年來高峰

    環境資訊中心綜合外電;姜唯 編譯;林大利 審校

    本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    ※帶您來了解什麼是 USB CONNECTOR  ?

    ※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

    ※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!

    ※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

    ※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

    ※教你寫出一流的銷售文案?

    ※別再煩惱如何寫文案,掌握八大原則!

  • 工業轉型與綠色振興聲明 就政策、技術、金融三個領域提出建言

    文:台大風險政策中心 RSPRC;林怡均翻譯;趙家緯審校

    本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    ※為什麼 USB CONNECTOR 是電子產業重要的元件?

    網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

    ※台北網頁設計公司全省服務真心推薦

    ※想知道最厲害的網頁設計公司"嚨底家"!

    ※推薦評價好的iphone維修中心

    網頁設計最專業,超強功能平台可客製化

    ※別再煩惱如何寫文案,掌握八大原則!

  • 海洋最大謎團——沒人看過鯨鯊生小孩 科學家取得腹部超音波仍無果

    環境資訊中心綜合外電;姜唯 編譯;林大利 審校

    本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能

    台北網頁設計公司這麼多該如何選擇?

    ※智慧手機時代的來臨,RWD網頁設計為架站首選

    ※評比南投搬家公司費用收費行情懶人包大公開

    ※回頭車貨運收費標準

    網頁設計最專業,超強功能平台可客製化

    ※別再煩惱如何寫文案,掌握八大原則!

  • 業界也認了 不是所有生質能都是碳中性 歐盟面臨減碳新挑戰

    環境資訊中心綜合外電;姜唯 編譯;林大利 審校

    本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    ※帶您來了解什麼是 USB CONNECTOR  ?

    ※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

    ※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!

    ※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

    ※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

    ※教你寫出一流的銷售文案?

  • 日企研發寒天製的透明可食薄膜 成塑膠減量新選擇

    文:宋瑞文

    本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    ※為什麼 USB CONNECTOR 是電子產業重要的元件?

    網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

    ※台北網頁設計公司全省服務真心推薦

    ※想知道最厲害的網頁設計公司"嚨底家"!

    ※推薦評價好的iphone維修中心

  • 伊朗火災與爆炸頻傳 伊斯法罕省電廠也傳事故

    摘錄自2020年7月19日中央社報導

    伊朗中部伊斯法罕省一座電廠今天(19日)發生爆炸。所幸沒有人員傷亡。電廠過了約兩小時恢復正常運作,伊斯法罕省供電不受影響。

    伊朗各地的軍事與民用設施近幾週頻傳火災與爆炸事故,讓伊朗境內人士懷疑可能是宿敵以色列在搞破壞。以色列指控伊朗試圖發展核彈,伊朗則堅稱本身的核子計畫完全是為了和平目的。

    首都德黑蘭(Tehran)6月下旬就發生兩起爆炸,其中一起發生在軍事用地附近,另一起衛生中心的火災則奪走19人性命。本月稍早,伊朗南部一座造船廠、德黑蘭南方一座工廠,以及伊朗中部的納坦茲(Natanz)核設施,也分別發生火災或爆炸事故。其中工廠事故奪走兩人性命。伊朗當局形容納坦茲核設施起火是意外,他們基於「安全理由」不公布事發原因及細節。

    土地利用
    能源轉型
    國際新聞
    伊朗
    火力發電廠
    火災
    災害
    核能

    本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能

    台北網頁設計公司這麼多該如何選擇?

    ※智慧手機時代的來臨,RWD網頁設計為架站首選

    ※評比南投搬家公司費用收費行情懶人包大公開

    ※回頭車貨運收費標準

  • 在k8s上部署日誌系統elfk

    在k8s上部署日誌系統elfk

    日誌系統elfk

    前言

    經過上周的技術預研,在本周一通過開會研究,根據公司的現有業務流量和技術棧,決定選擇的日誌系統方案為:elasticsearch(es)+logstash(lo)+filebeat(fi)+kibana(ki)組合。es選擇使用aliyun提供的es,lo&fi選擇自己部署,ki是阿里雲送的。因為申請ecs需要一定的時間,暫時選擇部署在測試&生產環境(吐槽一下,我司測試和生產公用一套k8s並且託管與aliyun……)。用時一天(前期有部署的差不多過)完成在kubernetes上部署完成elfk(先部署起來再說,優化什麼的後期根據需要再搞)。

    組件簡介

    es 是一個實時的、分佈式的可擴展的搜索引擎,允許進行全文、結構化搜索,它通常用於索引和搜索大量日誌數據,也可用於搜索許多不同類型的文。

    lo 主要的有點就是它的靈活性,主要因為它有很多插件,詳細的文檔以及直白的配置格式讓它可以在多種場景下應用。我們基本上可以在網上找到很多資源,幾乎可以處理任何問題。

    作為 Beats 家族的一員,fi 是一個輕量級的日誌傳輸工具,它的存在正彌補了 lo 的缺點fi作為一個輕量級的日誌傳輸工具可以將日誌推送到中心lo。

    ki是一個分析和可視化平台,它可以瀏覽、可視化存儲在es集群上排名靠前的日誌數據,並構建儀錶盤。ki結合es操作簡單集成了絕大多數es的API,是專業的日誌展示應用。

    數據採集流程圖

    日誌流向:logs_data—> fi —> lo —> es—> ki。

    logs_data通過fi收集日誌,輸出到lo,通過lo做一些過濾和修改之後傳送到es數據庫,ki讀取es數據庫做分析。

    部署

    根據我司的實際集群狀況,此文檔部署將完全還原日誌系統的部署情況。

    在本地MAC安裝kubectl連接aliyun託管k8s

    在客戶端(隨便本地一台虛機上)安裝和託管的k8s一樣版本的kubectl

    curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.14.8/bin/linux/amd64/kubectl   
    chmod +x ./kubectl 
    mv ./kubectl /usr/local/bin/kubectl  
    將阿里雲託管的k8s的kubeconfig 複製到$HOME/.kube/config 目錄下,注意用戶權限的問題
    
    部署ELFK

    申請一個名稱空間(一般一個項目一個名稱空間)。

    # cat kube-logging.yaml 
    apiVersion: v1
    kind: Namespace
    metadata:
      name: loging
    

    部署es。網上找個差不多的資源清單,根據自己的需求進行適當的修改,運行,出錯就根據日誌進行再修改。

    # cat elasticsearch.yaml 
    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: local-class
      namespace: loging
    provisioner: kubernetes.io/no-provisioner
    volumeBindingMode: WaitForFirstConsumer
    # Supported policies: Delete, Retain
    reclaimPolicy: Delete
    ---
    kind: PersistentVolume
    apiVersion: v1
    metadata:
      name: datadir1
      namespace: logging
      labels:
        type: local
    spec:
      storageClassName: local-class
      capacity:
        storage: 5Gi
      accessModes:
        - ReadWriteOnce
      hostPath:
        path: "/data/data1"
    --- 
    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: elasticsearch
      namespace: loging
    spec:
      serviceName: elasticsearch
      selector:
        matchLabels:
          app: elasticsearch
      template:
        metadata:
          labels:
            app: elasticsearch
        spec:
          containers:
          - name: elasticsearch
            image: elasticsearch:7.3.1
            resources:
                limits:
                  cpu: 1000m
                requests:
                  cpu: 100m
            ports:
            - containerPort: 9200
              name: rest
              protocol: TCP
            - containerPort: 9300
              name: inter-node
              protocol: TCP
            volumeMounts:
            - name: data
              mountPath: /usr/share/elasticsearch/data
            env:
              - name: "discovery.type"
                value: "single-node"
              - name: cluster.name
                value: k8s-logs
              - name: node.name
                valueFrom:
                  fieldRef:
                    fieldPath: metadata.name
              - name: ES_JAVA_OPTS
                value: "-Xms512m -Xmx512m"
          initContainers:
          - name: fix-permissions
            image: busybox
            command: ["sh", "-c", "chown -R 1000:1000 /usr/share/elasticsearch/data"]
            securityContext:
              privileged: true
            volumeMounts:
            - name: data
              mountPath: /usr/share/elasticsearch/data
          - name: increase-vm-max-map
            image: busybox
            command: ["sysctl", "-w", "vm.max_map_count=262144"]
            securityContext:
              privileged: true
          - name: increase-fd-ulimit
            image: busybox
            command: ["sh", "-c", "ulimit -n 65536"]
            securityContext:
              privileged: true
      volumeClaimTemplates:
      - metadata:
          name: data
          labels:
            app: elasticsearch
        spec:
          accessModes: [ "ReadWriteOnce" ]
          storageClassName: "local-class"
          resources:
            requests:
              storage: 5Gi
    ---
    kind: Service
    apiVersion: v1
    metadata:
      name: elasticsearch
      namespace: loging
      labels:
        app: elasticsearch
    spec:
      selector:
        app: elasticsearch
      clusterIP: None
      ports:
        - port: 9200
          name: rest
        - port: 9300
          name: inter-node
    

    部署ki。因為根據數據採集流程圖,ki是和es結合的,配置相對簡單。

    # cat kibana.yaml 
    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
      name: kibana
      namespace: loging
      labels:
        k8s-app: kibana
    spec:
      replicas: 1
      selector:
        matchLabels:
          k8s-app: kibana
      template:
        metadata:
          labels:
            k8s-app: kibana
        spec:
          containers:
          - name: kibana
            image: kibana:7.3.1
            resources:
              limits:
                cpu: 1
                memory: 500Mi
              requests:
                cpu: 0.5
                memory: 200Mi
            env:
              - name: ELASTICSEARCH_HOSTS
    #注意value是es的services,因為es是有狀態,用的無頭服務,所以連接的就不僅僅是pod的名字了
                value: http://elasticsearch:9200   
            ports:
            - containerPort: 5601
              name: ui
              protocol: TCP
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: kibana
      namespace: loging
    spec:
      ports:
      - port: 5601
        protocol: TCP
        targetPort: ui
      selector:
        k8s-app: kibana
    

    配置ingress-controller。因為我司用的是阿里雲託管的k8s自帶的nginx-ingress,並且配置了強制轉換https。所以kibana-ingress也要配成https。

    # openssl genrsa -out tls.key 2048
    # openssl req -new -x509 -key tls.key -out tls.crt -subj /C=CN/ST=Beijing/L=Beijing/O=DevOps/CN=kibana.test.realibox.com
    # kubectl create secret tls kibana-ingress-secret --cert=tls.crt --key=tls.key
    

    kibana-ingress配置如下。提供兩種,一種是https,一種是http。

    https:
    # cat kibana-ingress.yaml 
    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: kibana
      namespace: loging
    spec:
      tls:
      - hosts:
        - kibana.test.realibox.com
        secretName: kibana-ingress-secret
      rules:
      - host: kibana.test.realibox.com
        http:
          paths:
          - path: /
            backend:
              serviceName: kibana
              servicePort: 5601
    
    http:
    # cat kibana-ingress.yaml 
    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: kibana
      namespace: loging
    spec:
      rules:
      - host: kibana.test.realibox.com
        http:
          paths:
          - path: /
            backend:
              serviceName: kibana
              servicePort: 5601
    

    部署lo。因為lo的作用是對fi收集到的日誌進行過濾,需要根據不同的日誌做不同的處理,所以可能要經常性的進行改動,要進行解耦。所以選擇以configmap的形式進行掛載。

    # cat logstash.yaml
    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
      name: logstash
      namespace: loging
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: logstash
      template:
        metadata:
          labels:
            app: logstash
        spec:
          containers:
          - name: logstash
            image: elastic/logstash:7.3.1
            volumeMounts:
            - name: config
              mountPath: /opt/logstash/config/containers.conf
              subPath: containers.conf
            command:
            - "/bin/sh"
            - "-c"
            - "/opt/logstash/bin/logstash -f /opt/logstash/config/containers.conf"
          volumes:
          - name: config
            configMap:
              name: logstash-k8s-config
    ---
    apiVersion: v1
    kind: Service
    metadata:
      labels:
        app: logstash
      name: logstash
      namespace: loging
    spec:
      ports:
        - port: 8080       
          targetPort: 8080
      selector:
        app: logstash
      type: ClusterIP
    
    # cat logstash-config.yaml 
    ---
    apiVersion: v1
    kind: Service
    metadata:
      labels:
        app: logstash
      name: logstash
      namespace: loging
    spec:
      ports:
        - port: 8080       
          targetPort: 8080
      selector:
        app: logstash
      type: ClusterIP
    ---
    
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: logstash-k8s-config
      namespace: loging
    data:
      containers.conf: |
        input {
          beats {
            port => 8080  #filebeat連接端口
          }
        }
        output {
          elasticsearch {
            hosts => ["elasticsearch:9200"]  #es的service
            index => "logstash-%{+YYYY.MM.dd}"
          }
        }
    注意:修改configmap 相當於修改鏡像。必須重新apply 應用資源清單才能生效。根據數據採集流程圖,lo的數據由fi流入,流向es。
    

    部署fi。fi的主要作用是進行日誌的採集,然後將數據交給lo。

    # cat filebeat.yaml 
    ---
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: filebeat-config
      namespace: loging
      labels:
        app: filebeat
    data:
      filebeat.yml: |-
        filebeat.config:
          inputs:
            # Mounted `filebeat-inputs` configmap:
            path: ${path.config}/inputs.d/*.yml
            # Reload inputs configs as they change:
            reload.enabled: false
          modules:
            path: ${path.config}/modules.d/*.yml
            # Reload module configs as they change:
            reload.enabled: false
        # To enable hints based autodiscover, remove `filebeat.config.inputs` configuration and uncomment this:
        #filebeat.autodiscover:
        #  providers:
        #    - type: kubernetes
        #      hints.enabled: true
        output.logstash:
          hosts: ['${LOGSTASH_HOST:logstash}:${LOGSTASH_PORT:8080}']   #流向lo
    ---
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: filebeat-inputs
      namespace: loging
      labels:
        app: filebeat
    data:
      kubernetes.yml: |-
        - type: docker
          containers.ids:
          - "*"
          processors:
            - add_kubernetes_metadata:
                in_cluster: true
    ---
    apiVersion: extensions/v1beta1
    kind: DaemonSet
    metadata:
      name: filebeat
      namespace: loging
      labels:
        app: filebeat
    spec:
      selector:
        matchLabels:
          app: filebeat
      template:
        metadata:
          labels:
            app: filebeat
        spec:
          serviceAccountName: filebeat
          terminationGracePeriodSeconds: 30
          containers:
          - name: filebeat
            image: elastic/filebeat:7.3.1
            args: [
              "-c", "/etc/filebeat.yml",
              "-e",
            ]
            env:   #注入變量
            - name: LOGSTASH_HOST
              value: logstash
            - name: LOGSTASH_PORT
              value: "8080"
            securityContext:
              runAsUser: 0
              # If using Red Hat OpenShift uncomment this:
              #privileged: true
            resources:
              limits:
                memory: 200Mi
              requests:
                cpu: 100m
                memory: 100Mi
            volumeMounts:
            - name: config
              mountPath: /etc/filebeat.yml
              readOnly: true
              subPath: filebeat.yml
            - name: inputs
              mountPath: /usr/share/filebeat/inputs.d
              readOnly: true
            - name: data
              mountPath: /usr/share/filebeat/data
            - name: varlibdockercontainers
              mountPath: /var/lib/docker/containers
              readOnly: true
          volumes:
          - name: config
            configMap:
              defaultMode: 0600
              name: filebeat-config
          - name: varlibdockercontainers
            hostPath:
              path: /var/lib/docker/containers
          - name: inputs
            configMap:
              defaultMode: 0600
              name: filebeat-inputs
          # data folder stores a registry of read status for all files, so we don't send everything again on a Filebeat pod restart
          - name: data
            hostPath:
              path: /var/lib/filebeat-data
              type: DirectoryOrCreate
    ---
    apiVersion: rbac.authorization.k8s.io/v1beta1
    kind: ClusterRoleBinding
    metadata:
      name: filebeat
    subjects:
    - kind: ServiceAccount
      name: filebeat
      namespace: loging
    roleRef:
      kind: ClusterRole
      name: filebeat
      apiGroup: rbac.authorization.k8s.io
    ---
    apiVersion: rbac.authorization.k8s.io/v1beta1
    kind: ClusterRole
    metadata:
      name: filebeat
      labels:
        app: filebeat
    rules:
    - apiGroups: [""] # "" indicates the core API group
      resources:
      - namespaces
      - pods
      verbs:
      - get
      - watch
      - list
    ---
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: filebeat
      namespace: loging
      labels:
        app: filebeat
    ---
    

    至此完成在k8s上部署es+lo+fi+ki ,進行簡單驗證。

    驗證

    查看svc、pod、ingress信息

    # kubectl get svc,pods,ingress -n loging
    NAME                    TYPE        CLUSTER-IP        EXTERNAL-IP   PORT(S)             AGE
    service/elasticsearch   ClusterIP   None              <none>        9200/TCP,9300/TCP   151m
    service/kibana          ClusterIP   xxx.168.239.2xx   <none>        5601/TCP            20h
    service/logstash        ClusterIP   xxx.168.38.1xx   <none>        8080/TCP            122m
    
    NAME                            READY   STATUS    RESTARTS   AGE
    pod/elasticsearch-0             1/1     Running   0          151m
    pod/filebeat-24zl7              1/1     Running   0          118m
    pod/filebeat-4w7b6              1/1     Running   0          118m
    pod/filebeat-m5kv4              1/1     Running   0          118m
    pod/filebeat-t6x4t              1/1     Running   0          118m
    pod/kibana-689f4bd647-7jrqd     1/1     Running   0          20h
    pod/logstash-76bc9b5f95-qtngp   1/1     Running   0          122m
    
    NAME                        HOSTS                       ADDRESS        PORTS     AGE
    ingress.extensions/kibana   kibana.test.realibox.com   xxx.xx.xx.xxx   80, 443   19h
    
    web配置

    配置索引

    發現

    至此算是簡單完成。後續需要不斷優化,不過那是後事了。

    問題總結

    這應該算是第一次親自在測試&生產環境部署應用了,而且是自己很不熟悉的日子系統,遇到了很多問題,需要總結。

    1. 如何調研一項技術棧;
    2. 如何選定方案;
    3. 因為網上幾乎沒有找到類似的方案(也不曉得別的公司是怎麼搞的,反正網上找不到有效的可能借鑒的)。需要自己根據不同的文檔總結嘗試;
    4. 一個組件的標籤盡可能一致;
    5. 如何查看公司是否做了端口限制和https強制轉換;
    6. 遇到IT的事一定要看日誌,這點很重要,日誌可以解決絕大多數問題;
    7. 一個人再怎麼整也會忽略一些點,自己先嘗試然後請教朋友,共同進步。
    8. 項目先上線再說別的,目前是這樣,一件事又百分之20的把握就可以去做了。百分之80再去做就沒啥意思了。
    9. 自學重點學的是理論,公司才能學到操作。

    本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    ※為什麼 USB CONNECTOR 是電子產業重要的元件?

    網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

    ※台北網頁設計公司全省服務真心推薦

    ※想知道最厲害的網頁設計公司"嚨底家"!

    ※推薦評價好的iphone維修中心

  • MySql輕鬆入門系列——第二站 使用visual studio 對mysql進行源碼級調試

    MySql輕鬆入門系列——第二站 使用visual studio 對mysql進行源碼級調試

    一:背景

    1. 講故事

    上一篇說了mysql的架構圖,很多同學反饋說不過癮,畢竟還是聽我講故事,那這篇就來說一說怎麼利用visual studio 對 mysql進行源碼級調試,畢竟源碼面前,不談隱私,聖人面前,皆為螻蟻。

    二:工具合集

    mysql是C++寫的,要想在windows上編譯,還需要下載幾個必備小工具。

    • mysql-5.7.12.zip
    • cmake-3.17.3-win64-x64.msi
    • boost_1_59_0.tar.gz
    • bison-2.4.1-setup.exe
    • windows 10 x64

    這裏簡單說一下:可以用 cmake 將源碼生成 *.sln 可打開的解決方案,比如可以通過它最終生成 MySQL.sln。boost 是C++中非常強大的基礎庫,bison 一個流行的語法分析器程序,用於給mysql提供語法分析,最後就是下載正確的mysql版本5.7.12。

    三. 詳細安裝

    我會寫的比較細,畢竟我也花了一下午時間,寒酸(┬_┬)

    1. cmake-3.17.3-win64-x64.msi 和 bison-2.4.1-setup.exe

    cmake 和 bison 安裝起來比較方便,一鍵安裝就可以了,不過這裡有一個大坑注意了,在安裝Bison的時候,千萬不要使用默認路徑,因為默認路徑有空格,會導致你後面vs編譯的時候卡住,又不显示什麼原因,可氣!!! 所以我換成自定義的: C:\2\GnuWin32。

    最後確保 cmake 和 bison 的bin文件都在 環境變量中即可。

    2. mysql-5.7.12.zip

    這裏我用 C:\2作為根文件夾,所有的小工具都在這裏,如圖:

    接下來將 mysql-5.7.12.zip 解壓一下,然後進入解壓后的文件夾,新建一個boost文件夾,將boost_1_59_0.tar.gz放入其中,然後再新建一個 brelease 文件夾可用於存放最終生成的MySql.sln。。

    3. cmake編譯

    都準備好了之後,可以開始cmake編譯了。

    
    PS C:\2\mysql-5.7.12\brelease> cmake ..  -DDOWNLOAD_BOOST=1 -DWITH_BOOST="C:\2\mysql-5.7.12\boost\boost_1_59_0.tar.gz"
    -- Building for: Visual Studio 16 2019
    CMake Deprecation Warning at CMakeLists.txt:26 (CMAKE_POLICY):
      The OLD behavior for policy CMP0018 will be removed from a future version
      of CMake.
    -- Cannot find wix 3, installer project will not be generated
    -- COMPILE_DEFINITIONS: _WIN32_WINNT=0x0601;WIN32_LEAN_AND_MEAN;NOGDI;NOMINMAX;HAVE_CONFIG_H
    -- CMAKE_C_FLAGS: /DWIN32 /D_WINDOWS /W3 /MP /wd4800 /wd4805 /wd4996
    -- CMAKE_CXX_FLAGS: /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MP /wd4800 /wd4805 /wd4996 /we4099
    -- CMAKE_C_FLAGS_DEBUG: /MTd /Z7 /Ob1 /Od /RTC1 /EHsc -DENABLED_DEBUG_SYNC -DSAFE_MUTEX
    -- CMAKE_CXX_FLAGS_DEBUG: /MTd /Z7 /Ob1 /Od /RTC1 /EHsc -DENABLED_DEBUG_SYNC -DSAFE_MUTEX
    -- CMAKE_C_FLAGS_RELWITHDEBINFO: /MT /Z7 /O2 /Ob1 /DNDEBUG /EHsc -DDBUG_OFF
    -- CMAKE_CXX_FLAGS_RELWITHDEBINFO: /MT /Z7 /O2 /Ob1 /DNDEBUG /EHsc -DDBUG_OFF
    -- Configuring done
    -- Generating done
    -- Build files have been written to: C:/2/mysql-5.7.12/brelease
    
    

    當看到最後一句 Build files have been written to: C:/2/mysql-5.7.12/brelease,恭喜你,MySQL.sln生成好了。

    4. 打開 MySQL.sln 編譯項目

    我的電腦安裝的是visual studio 2019,接下來打開MySql.Sln整體編譯,需要等個十幾分鐘,看到下面的輸出就算安裝成功。

    三: 啟動mysql並調試insert

    1. mysql的初始化

    這裏要做兩件事情,第一件事是將mysql的調試模式打開,第二件事就是附加 --initialize 啟動參數。

    <1> mysql 調試模式打開

    修改C:\2\mysql-5.7.12\sql\mysqld.cc中的 test_lc_time_sz方法中的 DBUG_ASSERT(0); 改成 DBUG_ASSERT(1); 如下圖:

    <2> vs的command增加啟動參數

    上一篇大家都知道了,mysqld項目是mysql的啟動項目,main函數也在其中,在F5調試之前增加初始化參數 --console --initialize,如下圖:

    2. 繼續入坑出坑

    啟動之後,有103個報錯,氣人呀。。。看錯誤信息應該是編碼問題,如下圖:

    修改起來也很簡單,將 C:\2\mysql-5.7.12\sqlsql_locale.cc 用 [utf-8 + BOM] 格式保存一下,然後對mysqld項目Rebuild再Ctrl+F5直接運行,終於謝天謝地,從輸出可以看到,搞定啦。。。太不容易啦。

    從上圖中可以看到,默認密碼是:zJDE>IC5o+ya,先記錄下這個密碼,然後再把CommandLine Arguments 中的–initialize去掉再重啟Console。

    可以看到,3306端口已開啟,然後用剛才的 zJDE>IC5o+ya 連接即可,這裏我使用navicat。

    連接上去後會提示修改默認密碼,設置我就設置為:123456 ,嘿嘿,一切搞定~~~

    3. 繼續追蹤 write_row

    上一篇我們追蹤到了 write_row 就斷掉了,我當時說它是一個虛方法,由底層具體的存儲引擎去調用,代碼如下:

    
    int handler::ha_write_row(uchar *buf)
    {
        MYSQL_TABLE_IO_WAIT(m_psi, PSI_TABLE_WRITE_ROW, MAX_KEY, 0,{ error= write_row(buf); })
    }
    
    //這是一個虛方法
    virtual int write_row(uchar *buf __attribute__((unused)))
    {
        return HA_ERR_WRONG_COMMAND;
    }
    
    

    到底這話虛不虛,這次我親自調試一下給大家看看,證據先行哈。。。為了方便,我生成一條創表sql。

    
    drop database if exists `datamip`;
    create database `datamip`;
    drop table if exists `datamip`.`customer`;
    create table `datamip`.`customer` (
     `customerID` int NOT NULL AUTO_INCREMENT COMMENT '自增主鍵',
     `customerName` varchar(50) COMMENT '用戶姓名',
     `email` varchar(50) COMMENT '郵箱地址',
     `desc` varchar(50) COMMENT '描述',
     primary key (`customerID`)
    ) ENGINE=InnoDB charset=utf8 collate=utf8_bin;
    
    

    接下來,大家看仔細了,在源碼 int handler::ha_write_row(uchar *buf) 方法處下一個斷點,然後F5調試應用程序。

    接下來可以執行insert操作,這地方會命中斷點的。

    
    insert into  `datamip`.`customer`(customerName,email,`desc`) values('mary','123456789@qq.com','vip');
    
    

    可以看到,斷點命中了,然後進行單步調試,最終你會看到代碼會進入到 C:\2\mysql-5.7.12\storage\innobase\handler\ha_innodb.cc中的 int ha_innobase::write_row 方法,如下圖:

    然後找幾個局部變量和調用堆棧看看。。。

    四: 總結

    這就是我花了一下午的時間總結出的進坑出坑指南,希望能幫助大家節省時間,還是那句話,源碼面前,不談隱私,若還能進行調試,那一切皆為螻蟻!

    如您有更多問題與我互動,掃描下方進來吧~

    本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能

    台北網頁設計公司這麼多該如何選擇?

    ※智慧手機時代的來臨,RWD網頁設計為架站首選

    ※評比南投搬家公司費用收費行情懶人包大公開

    ※回頭車貨運收費標準