2017-10-17 6 views
0

Je dois me connecter à Splunk à partir d'AWS Lambda en utilisant Java8 runtime. Il utilise le cadre de printemps et j'ai ajouté l'appendeur Splunk de retour au projet. Il n'y a pas d'erreurs et les journaux ne semblent pas apparaître dans Splunk. L'administrateur de Splunk a mentionné qu'il n'y a aucune demande reçue sur le serveur de Splunk. Lorsque j'ai essayé d'appeler manuellement l'API REST, le journal apparaît dans Splunk. La connectivité entre AWS Lambda et le serveur splunk est donc bonne. L'applicateur Splunk semble invoquer l'API de manière asynchrone et j'ai ajouté un sommeil de 50 secondes à la fin du code AWS Lambda pour voir si c'est un problème avec la machine virtuelle qui se termine avant la fin de l'étape asynchrone. Pas de chance pour le moment. Comment puis-je déboguer davantage?Le logback de splunk/l'appendeur log4j ne semble pas enregistrer le splunk

Extrait de code: -

public class LambdaApp implements RequestHandler<String, Object> 
{ 
    private static final Logger LOGGER = LoggerFactory.getLogger(LambdaApp.class); 
    private static final Logger SPLUNK_LOGGER = LoggerFactory.getLogger("splunk.logger"); 

    @Override 
    public Object handleRequest(String event, Context context) 
    { 

     SPLUNK_LOGGER.info("AWS Lambda start"); 
     try { 
      Thread.sleep(50000); 
     } catch(InterruptedException ex) { 
      Thread.currentThread().interrupt(); 
     } 
     return "handled"; 
    } 

dépendance Maven: -

<dependency> 
     <groupId>com.splunk.logging</groupId> 
     <artifactId>splunk-library-javalogging</artifactId> 
     <version>1.5.2</version> 
</dependency> 

configuration Logback: -

<appender name="http" class="com.splunk.logging.HttpEventCollectorLogbackAppender"> 
    <url>https://a.b.c.d:8088</url> 
    <token>valid-token</token> 
    <disableCertificateValidation>true</disableCertificateValidation> 
    <layout class="ch.qos.logback.classic.PatternLayout"> 
        <pattern>{%msg}</pattern> 
    </layout> 
</appender> 

<logger name ="splunk.logger" level="DEBUG"> 
     <appender-ref ref="http" /> 
    </logger> 
+0

Je ne pense pas Thread.sleep est suffisante pour vider un logback async appender. De plus, quand un lambda se termine, aucune interruption n'est envoyée à la JVM, donc les hooks d'arrêt ne fonctionnent pas. Peut-être échanger avec un appender de synchronisation. –

Répondre

0

La première étape consiste à ajouter batch_size_count pour exclure tout problème avec le HttpEventCollectorLogbackAppender ne pas vider dans Splunk.

<appender name="http" class="com.splunk.logging.HttpEventCollectorLogbackAppender"> 
    <url>https://a.b.c.d:8088</url> 
    <token>valid-token</token> 
    <batch_size_count>1</batch_size_count> 
    <disableCertificateValidation>true</disableCertificateValidation> 
    <layout class="ch.qos.logback.classic.PatternLayout"> 
     <pattern>{%msg}</pattern> 
    </layout> 
</appender> 

Vous devez également vérifier que vous utilisez Splunk 6.3+ sur l'extrémité de réception depuis HTTP événement Collector nécessite un minimum de v6.3