微服務從代碼到k8s部署應有盡有系列(十一、日誌收集)

我們用一個系列來講解從需求到上線、從代碼到k8s部署、從日誌到監控等各個方面的微服務完整實踐。

整個項目使用了go-zero開發的微服務,基本包含了go-zero以及相關go-zero作者開發的一些中間件,所用到的技術棧基本是go-zero項目組的自研組件,基本是go-zero全家桶了。

實戰項目地址:https://github.com/Mikaelemmmm/go-zero-looklook

序言

在介紹之前,我先說一下整體思路,如果你的業務日誌量不是特別大恰好你又使用的是雲服務,那你直接使用雲服務日誌就可以了,比如阿里雲的SLS,基本就是點點鼠標配置幾步就可以將你的日誌收集到阿里雲的SLS裏面了,直接就可以在阿里雲中查看收集上來的日誌了,感覺也沒必要折騰。

如果你的日誌量比較大,那就可以上日誌系統了。

1、日誌系統

我們將業務日誌打印到console、file之後,市面上比較常用的方式是elk、efk等基本思路一樣,我們拿常說的elk來舉例,基本思路就是logstash收集過濾到elasticsearch中,然後kibana呈現

但是logstash本身是使用java開發的,佔用資源是真滴高,我們用go做業務,本身除了快就是佔用資源少構建塊,現在在搞個logstash浪費資源,那我們使用go-stash替代logstash,go-stash是go-zero官方自己開發的並且在線上經過長期大量實踐的,但是它不負責收集日誌,只負責過濾收集上來信息。

go-stash: https://github.com/kevwan/go-stash

2、架構方案

filebeat收集我們的業務日誌,然後將日誌輸出到kafka中作爲緩衝,go-stash獲取kafka中日誌根據配置過濾字段,然後將過濾後的字段輸出到elasticsearch中,最後由kibana負責呈現日誌

3、實現方案

在上一節錯誤處理中,我們可以看到已經將我們想要的錯誤日誌打印到了console控制檯中了,現在我們只需要做後續收集即可

3.1 kafka

#消息隊列
kafka:
  image: wurstmeister/kafka
  container_name: kafka
  ports:
    - 9092:9092
  environment:
    KAFKA_ADVERTISED_HOST_NAME: kafka
    KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
    TZ: Asia/Shanghai
  restart: always
  volumes:
    - /var/run/docker.sock:/var/run/docker.sock
  networks:
    - looklook_net
  depends_on:
    - zookeeper

先配置好kafka、zookeeper

然後我們進入kafka中先創建好filebeat收集日誌到kafka的topic

進入kafka容器

$  docker exec -it kafka /bin/sh

修改kafka監聽配置(或者你把配置文件掛載到物理機在修改也可以)

$ vi /opt/kafka/config/server.properties
listeners=PLAINTEXT://kafka:9092 # 原文件中,要加kafka listeners=PLAINTEXT://:9092
advertised.listeners=PLAINTEXT://kafka:9092 #源文件中,要加kafka advertised.listeners=PLAINTEXT://:9092

創建topic

$  cd /opt/kafka/bin
$ ./kafka-topics.sh --create --zookeeper zookeeper:2181 --replication-factor 1 -partitions 1 --topic looklook-log

3.2 filebeat

在項目根目錄下 docker-compose-env.yml文件中可以看到我們配置了filebeat

filebeat的配置我們掛載到 deploy/filebeat/conf/filebeat.yml

filebeat.inputs:
  - type: log
    enabled: true
    paths:
      - /var/lib/docker/containers/*/*-json.log

filebeat.config:
  modules:
    path: ${path.config}/modules.d/*.yml
    reload.enabled: false

processors:
  - add_cloud_metadata: ~
  - add_docker_metadata: ~

output.kafka:
  enabled: true
  hosts: ["kafka:9092"]
  #要提前創建topic
  topic: "looklook-log"
  partition.hash:
    reachable_only: true
  compression: gzip
  max_message_bytes: 1000000
  required_acks: 1

配置比較簡單,可以看到我們收集所有日誌直接 輸出到我們配置的kafka中 , topic配置上一步kafka中創建的topic即可

3.3 配置go-stash

我們來看下go-stash的配置文件 deploy/go-stash/etc/config.yaml

Clusters:
  - Input:
      Kafka:
        Name: gostash
        Brokers:
          - "kafka:9092"
        Topics:
          - looklook-log
        Group: pro
        Consumers: 16
    Filters:
      - Action: drop
        Conditions:
          - Key: k8s_container_name
            Value: "-rpc"
            Type: contains
          - Key: level
            Value: info
            Type: match
            Op: and
      - Action: remove_field
        Fields:
          # - message
          - _source
          - _type
          - _score
          - _id
          - "@version"
          - topic
          - index
          - beat
          - docker_container
          - offset
          - prospector
          - source
          - stream
          - "@metadata"
      - Action: transfer
        Field: message
        Target: data
    Output:
      ElasticSearch:
        Hosts:
          - "http://elasticsearch:9200"
        Index: "looklook-{{yyyy-MM-dd}}"

配置消費的kafka以及輸出的elasticsearch , 以及要過濾的字段等

3.4 elastic search、kibana

訪問kibana http://127.0.0.1:5601/ , 創建日誌索引

點擊左上角菜單(三個橫線那個東東),找到Analytics - > 點擊discover

然後在當前頁面,Create index pattern->輸入looklook-* -> Next Step ->選擇@timestamp->Create index pattern

然後點擊左上角菜單,找到Analytics->點擊discover ,稍等一會,日誌都顯示了 (如果不顯示,就去排查filebeat、go-stash,使用docker logs -f filebeat查看)

我們在代碼中添加一個錯誤日誌嘗試一下,代碼如下

func (l *BusinessListLogic) BusinessList(req types.BusinessListReq) (*types.BusinessListResp, error) {

	logx.Error("測試的日誌")

	...
}

我們訪問這個業務方法,去kibana中搜索 data.log : "測試",如下圖

4、結尾

到此日誌收集就完成了,接下來我們要實現鏈路追蹤

項目地址

https://github.com/zeromicro/go-zero

歡迎使用 go-zerostar 支持我們!

微信交流羣

關注『微服務實踐』公衆號並點擊 交流羣 獲取社區羣二維碼。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章