Pages - Menu

2022年2月14日 星期一

[ECK] ECK安裝

前言

ECK 其實就是EFK,
全名是 Elastic Cloud on Kubernetes ,官方說法是更容易也更簡單的使用及安裝。
 

正文

Elastic Cloud on Kubernetes 簡化了在 Kubernetes 中運行 Elasticsearch 和 Kibana 的作業,包括設置、升級、快照、擴展、高可用性、安全性等

istio 安裝時,開log

istioctl manifest install -f loadBalancerSourceRange.yaml --set meshConfig.accessLogFile=/dev/stdout

或是更改yaml ,加上 meshConfig這段

kind: IstioOperator
apiVersion: install.istio.io/v1alpha1
metadata:
  annotations:
    install.istio.io/ignoreReconcile: 'true'
  name: istio-external
  namespace: istio-system
spec:
  meshConfig:
    accessLogFile: /dev/stdout

ECK

Kubernetes before 1.16以上版本

kubectl create -f https://download.elastic.co/downloads/eck/1.9.1/crds.yaml
kubectl apply -f https://download.elastic.co/downloads/eck/1.9.1/operator.yaml

需先安裝 elasticsearch Operator
ref.Elasticsearch (ECK) Operator

  1. 佈署 elasticsearch
cat <<EOF | kubectl apply -f -
apiVersion: elasticsearch.k8s.elastic.co/v1
kind: Elasticsearch
metadata:
  name: quickstart
spec:
  version: 7.15.0
  nodeSets:
  - name: default
    count: 1
    config:
      node.store.allow_mmap: false
EOF

檢查狀態

    kubectl get elasticsearch

到pod裡面測試elastic是否正常
密碼需使用 kubectl get secret 取得

curl https://10.107.201.126:9200 -u 'elastic:J1fO9bu8adfsepYK8rIu91a73o' -k

正常的話,會顯示


  1. 佈署kibana
cat <<EOF | kubectl apply -f -
apiVersion: kibana.k8s.elastic.co/v1
kind: Kibana
metadata:
  name: quickstart
spec:
  version: 7.15.0
  count: 1
  elasticsearchRef:
    name: quickstart
EOF

檢查狀態

    kubectl get kibana

登入

帳號:elastic
密碼:kubectl get secret quickstart-es-elastic-user -o=jsonpath=’{.data.elastic}’ | base64 --decode; echo

kubectl port-forward service/quickstart-kb-http 5601

url : https://localhost:5601

beat

Beats 其實是一系列工具的總稱,可以解決下列的問題:

  • 讀取檔案
  • 提取指標
  • 提取網路資料
  • 測試服務可用性

有這些 Filebeat, Metricbeat,Heartbeat,Packetbeat…等

查詢目前有哪些index了

到DevTools執行


GET _cat/indices?s=index

ref.
Beats
【ES新手,破門而入!】Day9 - 我見故我在!Observability 基礎之趴特睡
【ES新手,破門而入!】Day13 - 關於 Metrics 的 23456 事

Filebeat

日誌處理工具,只要會產生日誌的地方都可以使用它,它可以幫助你將日誌傳送到 Elasticsearch 或其他的系統。


log 位置
/var/log/containers

查詢傳了哪些資料到elastic search裡面。
同樣使用 Devtools

GET filebeat-*/_search



[[57.filebeat 補充說明]]

ref.
Elastic Logging X Filebeat 深入理解

Metricsbeat

將指標傳送到 Elasticsearch 分析,並搭配 Kibana 做視覺化。

指標著重在資訊的週期性測量,讓我們可以瞭解系統的狀態如硬碟空間、CPU使用率等等。

ref. ES新手,破門而入!】Day10 - 眼見為憑!Observability 基礎之趴特佛

APM

APM 的全名是 Application Performance Monitoring(應用程式效能監控),是用來回答下面兩個主要的問題:

  • 應用程式要花多久時間來答覆請求(request)?
  • 應用程式遇到什麼種類的錯誤?

Elastic APM 是由下列 4 個組件所構成:

  1. APM Agents
  2. APM Server
  3. Elasticsearch
  4. Kibana

佈署APM server

cat <<EOF | kubectl apply -f -
apiVersion: apm.k8s.elastic.co/v1
kind: ApmServer
metadata:
  name: apm-server-quickstart
  namespace: default
spec:
  version: 7.15.0
  count: 1
  elasticsearchRef:
    name: quickstart
  kibanaRef:
    name: quickstart
  config:
    output:
      elasticsearch:
        host: [quickstart-es-http.default:9200]
        username: elastic
        password: "E1R10XXXXXXfr40"
        protocol: "http"
EOF

這邊的password要直接下指令查詢,這個是前面登入kibana的密碼。

kubectl get secret quickstart-es-elastic-user -o=jsonpath='{.data.elastic}' | base64 --decode; echo

為了環境單純,所以只使用http,要用https請參考連結 Reference an existing Elasticsearch cluster

ref.
Elastic APM 基礎教學
ES新手,破門而入!】Day10 - 眼見為憑!Observability 基礎之趴特佛
Run APM Server on ECK

GO-APM agent

在建立 apm-server的時候,
會同時建立好 secret token ,這個同樣需要下指令取得,
之後在 agent上面設定完,才能將資料傳到 APM server上面。

這邊取config name為 ( [apm name]apm-token )

  kubectl get secret apm-server-quickstart-apm-token -o=jsonpath='{.data.secret-token}' | base64 --decode; echo
  

設定APM server環境變數,由於我的服務都是docker image,
所以要把變數寫在Dockerfile裡面,當打包時,一併設定好環境變數


...
ENV ELASTIC_APM_SERVER_URL=https://apm-server-quickstart-apm-http.default:8200
ENV ELASTIC_APM_SERVICE_NAME=webhook
ENV ELASTIC_APM_SECRET_TOKEN=9m9XXXXXXGjwdIk41
ENV ELASTIC_APM_VERIFY_SERVER_CERT=false
ENV ELASTIC_APM_ENVIRONMENT=qa
...

然後再 main.go ,加上下面幾行。
這份go的程式,本身使用了 gorilla/mux的web框架

所以照官方文件的說明,加上下面幾行。

import (
    "github.com/gorilla/mux"

    "go.elastic.co/apm/module/apmgorilla"
)

func main() {
    router := mux.NewRouter()
    apmgorilla.Instrument(router)
    http.ListenAndServe(":80", router)
}

主要只有 apmgorilla.Instrument(router) 這行,
然後只要有經過80 port的資料就通通都會進入到APM裡面了。



這張圖裡面的TPS意思,可參考 [[45.網站效能指標一覽(未)]]

ref.
APM Server secret token
如何使用 Elastic APM Go 代理為 Go 應用裝載測量工具
[Docker 環境變數使用筆記](https://myapollo.com.tw/zh-tw/docker-env/)
Elastic APM-Go Agent介紹(中文翻譯)
connect to the APM Server
Solutions:安全的APM服務器訪問

vue-APM agent

安裝依賴套件

Kibana

![[61. kibana 查詢語法]]

ref.
Kibana Query Language

沒有留言:

張貼留言