SAE collecte les sorties standard (stdout) et les journaux de fichiers des instances d'application, puis les achemine vers des topics ApsaraMQ for Kafka. Cette fonctionnalité complète les capacités de collecte de Simple Log Service (SLS). Elle s'avère particulièrement utile lorsque vous ne pouvez pas collecter les journaux dans des projets SLS ou lorsque les utilisateurs RAM n'ont pas l'autorisation de consulter les journaux dans SLS. Depuis Kafka, vous pouvez router les données de journalisation vers des systèmes en aval tels qu'Elasticsearch pour l'analyse et le stockage à long terme.
Prérequis
Avant de commencer, assurez-vous de disposer des éléments suivants :
Prérequis SAE :
Chaque instance d'application dispose d'au moins 0,25 cœur CPU et de 250 Mo de ressources disponibles.
Prérequis ApsaraMQ for Kafka :
ApsaraMQ for Kafka est activé et un topic a été créé. SAE prend en charge ApsaraMQ for Kafka 2.X ou version ultérieure.
Si votre instance Kafka est déployée dans un VPC sans accès Internet, elle doit résider dans le même VPC que votre application SAE.
-
Une liste d'autorisation IP est configurée pour votre instance Kafka :
Si l'instance Kafka et l'application SAE se trouvent dans le même VPC mais sur des vSwitch différents, ajoutez le bloc CIDR du vSwitch de l'application SAE à la liste d'autorisation de Kafka.
Pour autoriser tout le trafic au sein du VPC, ajoutez
0.0.0.0/0à la liste d'autorisation.
Pour connaître les limites d'utilisation et les détails de facturation de Kafka, consultez les sections Limites et Présentation de la facturation.
Configurer la collecte de journaux lors de la création d'une application
Connectez-vous à la console SAE. Dans le volet de navigation de gauche, choisissez Applications > Applications. Sélectionnez une région et un namespace dans la liste déroulante Namespace, puis cliquez sur Create Application.
Dans la section Basic Information, configurez les informations de l'application et cliquez sur Next: Advanced Settings.
-
Développez la section Log Settings et activez l'option Activate Kafka. Configurez les paramètres suivants :
Paramètre Obligatoire Description Kafka Instance Oui L'instance ApsaraMQ for Kafka de destination. Collection Log Type Oui Le type de journaux à collecter. L'option File Logs (Log Path In Container) prend en charge plusieurs règles de collecte. L'option Container Standard Output Logs ne prend en charge qu'une seule règle de collecte et n'est disponible que si votre vSwitch se trouve dans une zone recommandée. Log Source Oui (journaux de fichiers uniquement) Le chemin d'accès complet au fichier journal à l'intérieur du conteneur, par exemple /tmp0/cjsc.log. Les expressions régulières sont prises en charge. Pour faire correspondre plusieurs fichiers ayant le même format, utilisez un chemin avec un caractère générique tel que/xxx/xxx/xxx/*.log.ImportantNe stockez pas d'autres fichiers importants dans le répertoire source des journaux, car les fichiers de ce répertoire peuvent être écrasés.
Kafka Topic Name Oui Le topic ApsaraMQ for Kafka existant vers lequel envoyer les journaux. Cliquez sur Create Application.
Vérifiez la configuration. Une fois l'application déployée, SAE commence à collecter les journaux selon vos règles. Dans le volet de navigation de gauche de la page des détails de l'application, choisissez Log Management > Persistent Logs. Cliquez sur l'onglet Log collection to Kafka. Si des journaux apparaissent, la règle de collecte est active.
Configurer la collecte de journaux lors du déploiement d'une application existante
Le redéploiement d'une application entraîne son redémarrage. Pour minimiser l'impact sur votre activité, effectuez le déploiement pendant les heures creuses.
Cette section s'applique aux applications disposant d'une ou plusieurs instances. Pour les applications comportant zéro instance, consultez la section Mettre à jour une application .
Connectez-vous à la console SAE. Dans le volet de navigation de gauche, choisissez Applications > Applications. Sélectionnez une région et un namespace, puis cliquez sur le nom de l'application.
Sur la page Basic Information, cliquez sur Deploy Application.
Dans la section Log Settings, activez l'option Activate Kafka. Configurez les paramètres comme décrit dans le tableau de la section précédente.
-
Cliquez sur OK.
ImportantUn fichier journal ne peut être envoyé vers qu'un seul topic Kafka à la fois. Si vous utilisez une version progressive ou un déploiement canari et que vous modifiez le topic tout en conservant la même source de journalisation, les journaux continuent d'être envoyés vers le topic d'origine jusqu'à ce que toutes les instances soient mises à jour.
Vérifiez la configuration. Une fois l'application déployée, choisissez Log Management > Persistent Logs dans le volet de navigation de gauche. Cliquez sur l'onglet Log collection to Kafka pour confirmer que les journaux apparaissent bien.
Format des journaux
Chaque message envoyé à ApsaraMQ for Kafka est un objet JSON contenant les champs suivants :
{
"file":"/home/admin/apache-tomcat-8.5.42/logs/localhost.2022-03-01.log",
"host":"test-kafka-9527eec8-b2c1-4f03-9178-5dac0fe16d07-*****",
"message":"01-Mar-2022 15:09:36.016 INFO [localhost-startStop-1] org.apache.catalina.core.ApplicationContext.log No Spring WebApplicationInitializer types detected on classpath",
"topic":"test2"
}
| Champ | Description |
|---|---|
file |
Le chemin d'accès du fichier journal collecté à l'intérieur du conteneur. |
host |
Le nom de l'instance d'application qui a produit le journal. |
message |
Le contenu du journal. |
topic |
Le topic ApsaraMQ for Kafka qui a reçu le journal. |
Journaux multilignes
SAE considère chaque saut de ligne (\n) comme une limite d'enregistrement de journal. Si votre application écrit des entrées sur plusieurs lignes, telles que des traces de pile d'exceptions Java, chaque ligne est envoyée sous forme de message distinct. Notez que dans les applications Java, une erreur est signalée si les journaux sont automatiquement fusionnés en une seule ligne :
java.lang.RuntimeException: testLog
at cn.niutong.controller.TestController.heathc(TestController.java:141)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at ...
Pour conserver les entrées multilignes ensemble, sérialisez-les sous forme de chaîne JSON sur une seule ligne dans votre application avant de les écrire dans le fichier journal.
Pour les cas d'utilisation avancés, tels que la fusion des journaux côté serveur, rejoignez le groupe DingTalk 32874633 pour obtenir une assistance technique.
FAQ
Les caractères génériques sont-ils pris en charge pour les chemins d'accès source des journaux ?
Oui. Utilisez un astérisque (*) pour faire correspondre tous les fichiers d'un répertoire. Par exemple, /tmp/logs/*.log fait correspondre tous les fichiers .log dans /tmp/logs/.
Pourquoi les journaux ne sont-ils pas collectés ?
La cause la plus fréquente est un problème de connectivité réseau entre SAE et l'instance Kafka. Vérifiez les points suivants :
Chemin réseau : Ouvrez Webshell SAE pour votre application et exécutez une commande
telnetvers l'endpoint de l'instance Kafka pour tester la connectivité. Pour plus de détails, consultez la section Utiliser la fonctionnalité Webshell pour vérifier l'état de santé des applications.VPC et liste d'autorisation : Confirmez que l'application SAE et l'instance Kafka se trouvent dans le même VPC, et que la liste d'autorisation IP de Kafka inclut le bloc CIDR du vSwitch SAE.
Si le réseau est accessible mais que les journaux manquent toujours, rejoignez le groupe DingTalk 32874633 pour obtenir une assistance technique.