skywalking (2) APISIX intègre SkyWalking pour la collecte de journaux et le suivi des liens


I. Aperçu

  Apache APISIX a intégré les fonctionnalités d'Apache SkyWaling Tracing dès la version 1.4 et a ajouté des fonctions telles que les journaux d'erreurs et la collecte des journaux d'accès dans les versions ultérieures. Désormais, grâce à la prise en charge des métriques par Apache SkyWalking, il peut aider Apache APISIX à mettre en œuvre une solution d'observabilité unique en mode intégré, couvrant simultanément les journaux, les métriques et le suivi des appels.

  Les amis qui connaissent Apache APISIX doivent savoir qu'Apache APISIX produira deux types de journaux pendant le fonctionnement, à savoir les journaux d'accès et les journaux d'erreurs.

  Le journal d'accès enregistre les informations détaillées de chaque demande et est un journal généré dans le cadre de la demande, il peut donc être directement associé au Tracing. Le journal des erreurs correspond aux informations de journal produites par Apache APISIX pendant l'exécution. Il s'agit de l'intégralité du journal au niveau de l'application, mais il ne peut pas être garanti qu'il soit lié à 100 % à la requête.

  Actuellement, Apache APISIX fournit un ensemble très riche de plug-ins de traitement des journaux, notamment TCP/HTTP/Kafka et d'autres plug-ins de collecte et de reporting, mais leur corrélation avec Tracing est relativement faible. En prenant Apache SkyWalking comme exemple, extrayez l'en-tête SkyWalking Tracing Conetxt dans l'enregistrement du journal latéral Apache APISIX et envoyez-le dans le système de fichiers, puis utilisez le cadre de traitement des journaux (fluentbit) pour convertir le journal dans un format de journal acceptable pour SkyWalking. Par la suite, le contexte de traçage est analysé et extrait pour obtenir l'ID de traçage, puis établir le contact avec la trace.

  Évidemment, la méthode ci-dessus est relativement lourde et compliquée, et une conversion supplémentaire du format de journal est requise. À cette fin, la nouvelle version a implémenté l'intégration des journaux d'accès Apache SkyWalking dans l'écosystème de plug-ins Apache APISIX, permettant aux utilisateurs d'utiliser plus facilement Apache SkyWalking pour collecter et traiter les journaux associés lors de l'utilisation d'Apache APISIX.

2. Déploiement d'Apisix

Pour le déploiement du skywalking, veuillez vous référer au billet de blog précédent : https://blog.csdn.net/bacawa/article/details/132359924

Site officiel : https://apisix.apache.org/
Je l'ai déployé en utilisant docker-compose, adresse de téléchargement : https://github.com/apache/apisix

1. Modifier le fichier de configuration APIsix

xxxx/apisix-docker-master/example/apisix_conf/config.yaml
est configuré comme suit :

apisix:
  node_listen: 9080              # APISIX listening port
  enable_ipv6: false

  enable_control: true
  control:
    ip: "0.0.0.0"
    port: 9092

deployment:
  admin:
    allow_admin:               # https://nginx.org/en/docs/http/ngx_http_access_module.html#allow
      - 0.0.0.0/0              # We need to restrict ip access rules for security. 0.0.0.0/0 is for test.

    admin_key:
      - name: "admin"
        key: edd1c9f034335f136f87ad84b625c8f1
        role: admin                 # admin: manage all configuration data

      - name: "viewer"
        key: 4054f7cf07e344346cd3f287985e76a2
        role: viewer

  etcd:
    host:                           # it's possible to define multiple etcd hosts addresses of the same etcd cluster.
      - "http://etcd:2379"          # multiple etcd address
    prefix: "/apisix"               # apisix configurations prefix
    timeout: 30                     # 30 seconds

plugins:                          # plugin list 如果没有该值,就直接添加
  - api-breaker
  - authz-keycloak
  - basic-auth
  - batch-requests
  - consumer-restriction
  - cors
  # - dubbo-proxy
  - echo
  # - error-log-logger
  # - example-plugin
  - fault-injection
  - grpc-transcode
  - hmac-auth
  - http-logger
  - ip-restriction
  - jwt-auth
  - kafka-logger
  - key-auth
  - limit-conn
  - limit-count
  - limit-req
  # - log-rotate
  # - node-status
  - openid-connect
  - prometheus
  - proxy-cache
  - proxy-mirror
  - proxy-rewrite
  - redirect
  - referer-restriction
  - request-id
  - request-validation
  - response-rewrite
  - serverless-post-function
  - serverless-pre-function
  - skywalking            #skywalking插件默认不打开这个插件,需要打开(配置上即可)
  - skywalking-logger     #skywalking-logger插件默认不打开这个插件,需要打开(配置上即可)
  - sls-logger
  - syslog
  - tcp-logger
  - udp-logger
  - uri-blocker
  - wolf-rbac
  - zipkin
  - server-info
  - traffic-split

plugin_attr:
  skywalking:                                  #配置skywalking的相关属性
    service_name: APISIX                       #注册进skywalking中的服务名称
    service_instance_name: "APISIX Instance Name"   #skywalking中的实例名称       
    endpoint_addr: http://192.168.54.53:12800  #skywalking地址
    report_interval: 1                         #skywalking上报间隔时间,单位为秒。
  prometheus:
    export_addr:
      ip: "0.0.0.0"
      port: 9091
discovery:     #服务发现的配置,不需要可以不配
  nacos:
    host:
      - "http://nacos:[email protected]:8848"
    prefix: "/nacos/v1/"
    fetch_interval: 30    # default 30 sec
    weight: 100           # default 100
    timeout:
      connect: 2000       # default 2000 ms
      send: 2000          # default 2000 ms
      read: 5000          # default 5000 ms

Concernant la configuration de skywalking, elle a été commentée dans le fichier de configuration ci-dessus. Vous pouvez regarder de plus près le contenu du fichier de configuration.

Les paramètres d'attribut skywalking de l'attribut plugin_attr sont présentés dans le tableau suivant :

nom taper valeur par défaut décrire
Nom du service chaîne "APISIX" Nom du service rapporté par SkyWalking
nom_instance_service chaîne « Nom de l'instance APISIX » Lorsque le nom de l'instance de service signalé par SkyWalking est défini sur $hostname, le nom d'hôte local sera obtenu.
nom_instance_service chaîne « Nom de l'instance APISIX » Lorsque le nom de l'instance de service signalé par SkyWalking est défini sur $hostname, le nom d'hôte local sera obtenu.
adresse_point_end chaîne "http://127.0.0.1:12800" Adresse du point de terminaison HTTP de SkyWalking, par exemple : http://127.0.0.1:12800
rapport_intervalle entier Valeurs intégrées du client SkyWalking Intervalle de rapport, l'unité est en secondes
2. Modifier le fichier de configuration du tableau de bord

xxxx/apisix-docker-master/example/dashboard_conf/conf.yaml

La configuration est la suivante :

conf:
  listen:
    host: 0.0.0.0     # `manager api` listening ip or host name
    port: 9000          # `manager api` listening port
  allow_list:           # If we don't set any IP list, then any IP access is allowed by default.
    - 0.0.0.0/0
  etcd:
    endpoints:          # supports defining multiple etcd host addresses for an etcd cluster
      - "http://etcd:2379"
                          # yamllint disable rule:comments-indentation
                          # etcd basic auth info
    # username: "root"    # ignore etcd username if not enable etcd auth
    # password: "123456"  # ignore etcd password if not enable etcd auth
    mtls:
      key_file: ""          # Path of your self-signed client side key
      cert_file: ""         # Path of your self-signed client side cert
      ca_file: ""           # Path of your self-signed ca cert, the CA is used to sign callers' certificates
    # prefix: /apisix     # apisix config's prefix in etcd, /apisix by default
  log:
    error_log:
      level: warn       # supports levels, lower to higher: debug, info, warn, error, panic, fatal
      file_path:
        logs/error.log  # supports relative path, absolute path, standard output
                        # such as: logs/error.log, /tmp/logs/error.log, /dev/stdout, /dev/stderr
    access_log:
      file_path:
        logs/access.log  # supports relative path, absolute path, standard output
                         # such as: logs/access.log, /tmp/logs/access.log, /dev/stdout, /dev/stderr
                         # log example: 2020-12-09T16:38:09.039+0800	INFO	filter/logging.go:46	/apisix/admin/routes/r1	{"status": 401, "host": "127.0.0.1:9000", "query": "asdfsafd=adf&a=a", "requestId": "3d50ecb8-758c-46d1-af5b-cd9d1c820156", "latency": 0, "remoteIP": "127.0.0.1", "method": "PUT", "errs": []}
  security:
      # access_control_allow_origin: "http://httpbin.org"
      # access_control_allow_credentials: true          # support using custom cors configration
      # access_control_allow_headers: "Authorization"
      # access_control-allow_methods: "*"
      # x_frame_options: "deny"
      content_security_policy: "default-src 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; frame-src *"  # You can set frame-src to provide content for your grafana panel.

authentication:
  secret:
    secret              # secret for jwt token generation.
                        # NOTE: Highly recommended to modify this value to protect `manager api`.
                        # if it's default value, when `manager api` start, it will generate a random string to replace it.
  expire_time: 3600     # jwt token expire time, in second
  users:                # yamllint enable rule:comments-indentation
    - username: admin   # username and password for login `manager api`
      password: admin
    - username: user
      password: user

plugins:                          # plugin list (sorted in alphabetical order)
  - api-breaker
  - authz-keycloak
  - basic-auth
  - batch-requests
  - consumer-restriction
  - cors
  # - dubbo-proxy
  - echo
  # - error-log-logger
  # - example-plugin
  - fault-injection
  - grpc-transcode
  - hmac-auth
  - http-logger
  - ip-restriction
  - jwt-auth
  - kafka-logger
  - key-auth
  - limit-conn
  - limit-count
  - limit-req
  # - log-rotate
  # - node-status
  - openid-connect
  - prometheus
  - proxy-cache
  - proxy-mirror
  - proxy-rewrite
  - redirect
  - referer-restriction
  - request-id
  - request-validation
  - response-rewrite
  - serverless-post-function
  - serverless-pre-function
  - skywalking      #默认不打开,这里给打开,如果没有就加上即可
  - sls-logger
  - syslog
  - tcp-logger
  - udp-logger
  - uri-blocker
  - wolf-rbac
  - zipkin
  - server-info
  - traffic-split

3. Utilisez docker-compose pour démarrer le service apisix
docker-compose up -d

Attendez un moment, environ 1 minute, entrez http://IP:9000 dans le navigateur et vous verrez la page suivante. Le nom d'utilisateur et le mot de passe sont visibles dans le fichier de configuration du tableau de bord ci-dessus :
Insérer la description de l'image ici

3. Activer les plug-ins

1. Créer un nouvel itinéraire Apisix

Utilisez la commande suivante pour en créer un nouveau. Si vous n'êtes pas habitué au curling, vous pouvez également utiliser le logiciel Apifox pour les tests. Il est super simple à utiliser et plus facile à utiliser que Postman.

L'IP et le port dans le code sont modifiés en fonction de la situation du siècle.

Tout d'abord, vous devez activer le plug-in skywalking. S'il n'est pas activé, le contexte de traçage ne peut pas être obtenu et la relation de suivi ne peut pas être produite. Vous devez également activer le plug-in skywalking-logger, afin que l'accès d'Apisix les journaux seront synchronisés avec skywalking.

curl http://192.168.54.56:9180/apisix/admin/routes/1 \
-H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
    
    
      "plugins": {
    
    
            "skywalking": {
    
              
      			"_meta": {
    
    
        			"disable": false
      			}
      		}
            "skywalking-logger": {
    
    
                "endpoint_addr": "http://192.168.54.53:12800"
            }

    },
       },
      "upstream": {
    
    
           "type": "roundrobin",
           "nodes": {
    
    
               "192.168.48.120:8850": 1
           }
      },
      "uri": "/demo/*"
}
2. Vérification

Lorsque vous demandez le service
Insérer la description de l'image ici
skywalking, il y aura des journaux et des informations de suivi.

Informations du journal
Informations du journal

Suivre les relations
Suivre les relations

relation topologique
Insérer la description de l'image ici

Résumer

  Cet article présente principalement le plug-in de journalisation d'Apache APISIX intégré à SkyWalking, offrant un fonctionnement et un environnement plus pratiques permettant à chacun d'effectuer le traitement des journaux dans Apache APISIX à l'avenir. Nous espérons que grâce au contenu de cet article, vous pourrez utiliser plus facilement Apache APISIX pour une gestion centralisée des données observables. Un article sur le traitement des journaux à l'aide de SkyWalking sera également publié dans le futur, alors restez à l'écoute.

  Fabrication terminée !

Je suppose que tu aimes

Origine blog.csdn.net/bacawa/article/details/132362682
conseillé
Classement