Le plug-in logstash-input-oss connecte Alibaba Cloud Logstash à Object Storage Service (OSS) via Simple Message Queue (anciennement MNS, désormais SMQ). Lorsqu'un objet OSS est mis à jour, SMQ transmet une notification au plug-in, ce qui déclenche la lecture des dernières données depuis OSS par Logstash.
logstash-input-oss est un plug-in open source. Pour plus d'informations, consultez le dépôt GitHub .
Fonctionnement
Un objet OSS est créé ou mis à jour (par exemple, via PutObject ou AppendObject).
OSS envoie une notification d'événement à une file d'attente SMQ.
Le plug-in reçoit la notification SMQ et extrait la clé de l'objet.
Logstash lit toutes les données contenues dans l'objet et les transmet en aval via le pipeline.
Remarques sur l'utilisation
Après réception d'une notification SMQ, Logstash synchronise toutes les données de l'objet associé, et non pas seulement les différences.
Les objets au format
.gzou.gzipsont traités comme des fichiers gzip. Tous les autres formats sont traités comme du texte brut.Les objets au format binaire (tels que
.jarou.bin) peuvent être lus sous forme de caractères illisibles.
Prérequis
Avant de commencer, assurez-vous d'avoir :
Installé le plug-in logstash-input-oss. Consultez la rubrique Installer ou supprimer un plug-in Logstash.
Activé OSS et SMQ, avec des buckets OSS situés dans la même région que les files d'attente ou les topics SMQ. Consultez les rubriques Activer OSS et Activer SMQ et autoriser les utilisateurs RAM à accéder à SMQ.
Configuré les règles de notification d'événements dans OSS. Consultez la rubrique Configurer les règles de notification d'événements.
Créer un pipeline
Créez un pipeline à l'aide de fichiers de configuration, comme décrit dans la rubrique Gérer les pipelines à l'aide de fichiers de configuration. Configurez les paramètres indiqués dans la section Paramètres, puis enregistrez et déployez le pipeline.
L'exemple suivant lit les données d'un bucket OSS et les écrit dans Alibaba Cloud Elasticsearch.
input {
oss {
endpoint => "oss-cn-hangzhou-internal.aliyuncs.com"
bucket => "zl-ossou****"
access_key_id => "******"
access_key_secret => "*********"
prefix => "file-sample-prefix"
mns_settings => {
endpoint => "******.mns.cn-hangzhou-internal.aliyuncs.com"
queue => "aliyun-es-sample-mns"
}
codec => json {
charset => "UTF-8"
}
}
}
output {
elasticsearch {
hosts => ["http://es-cn-***.elasticsearch.aliyuncs.com:9200"]
index => "aliyun-es-sample"
user => "elastic"
password => "changeme"
}
}
L'endpoint SMQ doit être un endpoint interne et ne doit pas être préfixé par http. L'utilisation d'un endpoint externe provoque une erreur.
Paramètres
Paramètres obligatoires
| Paramètre | Type | Description |
|---|---|---|
endpoint |
string | L'endpoint utilisé pour accéder à OSS. Consultez la rubrique Régions, endpoints et ports ouverts. |
bucket |
string | Le nom du bucket OSS. |
access_key_id |
string | L'ID AccessKey de votre compte Alibaba Cloud. |
access_key_secret |
string | Le secret AccessKey de votre compte Alibaba Cloud. |
mns_settings |
hash | La configuration SMQ. Consultez les sous-paramètres mns_settings. |
Paramètres facultatifs
| Paramètre | Type | Valeur par défaut | Description |
|---|---|---|---|
prefix |
string | — | Filtre les objets selon le préfixe de leur nom. Logstash lit uniquement les objets dont le nom commence par cette valeur. Il ne s'agit pas d'une expression régulière. Utilisez ce paramètre pour lire les données de répertoires spécifiques dans le bucket. |
additional_oss_settings |
hash | — | Paramètres supplémentaires du client OSS. Sous-paramètres pris en charge : secure_connection_enabled (activer les connexions sécurisées) et max_connections_to_oss (nombre maximal de connexions à OSS). |
delete |
boolean | false |
Indique si les objets traités doivent être supprimés du bucket OSS source après lecture. |
backup_to_bucket |
string | — | Le nom du bucket OSS dans lequel les objets traités sont sauvegardés. |
backup_to_dir |
string | — | Le répertoire local dans lequel les fichiers traités sont sauvegardés. |
backup_add_prefix |
string | — | Un préfixe ajouté à la clé de l'objet après traitement. La clé correspond au chemin complet incluant le nom de l'objet dans OSS. Utilisez ce paramètre pour stocker les sauvegardes dans un dossier spécifique au sein du même bucket ou d'un bucket différent. |
include_object_properties |
boolean | — | Indique si les propriétés de l'objet OSS (last_modified, content_type et metadata) doivent être incluses dans [@metadata][oss]. Si ce paramètre n'est pas défini, seule la clé [@metadata][oss][key] est disponible. |
exclude_pattern |
string | — | Une expression régulière Ruby correspondant aux clés d'objets à ignorer. Par exemple, "\/logs\/debug\/" exclut tous les objets contenant /logs/debug/ dans leur chemin. |
Sous-paramètres mns_settings
| Sous-paramètre | Obligatoire | Valeur par défaut | Description |
|---|---|---|---|
endpoint |
Oui | — | L'endpoint SMQ. Il doit s'agir d'un endpoint interne et ne doit pas inclure http. |
queue |
Oui | — | Le nom de la file d'attente SMQ. |
poll_interval_seconds |
Non | 10 |
Le temps d'attente maximal (en secondes) pour une requête ReceiveMessage lorsque la file d'attente est vide. Consultez la rubrique ReceiveMessage. |
wait_seconds |
Non | — | Le temps d'attente maximal du sondage (en secondes) pour une requête ReceiveMessage. |
Métadonnées d'objet
Lorsque include_object_properties est activé, le plug-in expose les champs suivants dans [@metadata][oss]. Utilisez ces champs dans vos étapes de filtrage ou de sortie pour enrichir les événements ou appliquer une logique conditionnelle.
| Champ | Type | Description |
|---|---|---|
[@metadata][oss][key] |
string | La clé complète de l'objet (chemin) dans OSS. Toujours disponible, indépendamment de la valeur de include_object_properties. |
[@metadata][oss][last_modified] |
string | L'horodatage de la dernière modification de l'objet. Disponible lorsque include_object_properties est défini sur true. |
[@metadata][oss][content_type] |
string | Le type MIME de l'objet. Disponible lorsque include_object_properties est défini sur true. |
[@metadata][oss][metadata] |
hash | Métadonnées personnalisées définies par l'utilisateur et associées à l'objet. Disponible lorsque include_object_properties est défini sur true. |
FAQ
Pourquoi le plug-in est-il basé sur SMQ plutôt que sur un sondage direct d'OSS ?
Les événements de mise à jour des objets OSS s'intègrent parfaitement à SMQ, ce qui fait de la notification par message une solution naturelle. L'alternative, consistant à utiliser l'API ListObjects, nécessite de suivre localement les objets déjà traités et ceux qui ne le sont pas. À mesure que le nombre d'objets augmente, les performances de ListObjects se dégradent. L'écosystème plus large du stockage d'objets (y compris la communauté open source Amazon S3) a également abandonné ListObjects au profit des mécanismes de notification par message.
Que se passe-t-il si Logstash est déclenché alors qu'OSS est encore en train d'écrire des données dans un objet ?
Le plug-in enregistre dans la file d'attente SMQ les objets qui ont été écrits et les transmet via le pipeline Logstash. Toutes les données qui n'ont pas encore été écrites dans OSS continuent d'être écrites. Lors du prochain déclenchement de Logstash, le plug-in lit les données restantes depuis OSS.