# Problème avec Aggregate

**URL:** <https://discuss.elastic.co/t/probleme-avec-aggregate/269669>\
**Category:** Discussions en français\
**Created:** [April 9, 2021, 7:19am UTC](https://discuss.elastic.co/t/probleme-avec-aggregate/269669 "2021-04-09T07:19:06Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![Yahya\_Bouzoubaa](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/yahya_bouzoubaa/32/85520_2.png) [@Yahya\_Bouzoubaa](https://discuss.elastic.co/u/Yahya_Bouzoubaa)\
**Post date:** [April 9, 2021, 7:19am UTC](https://discuss.elastic.co/t/probleme-avec-aggregate/269669/1 "2021-04-09T07:19:06Z")

</div>

Bonjour,

J'ai un bug qui persiste en lien avec l'aggregate.

Description du problème initial : j'ai des logs de types request et d'autres de type response. Les logs ne se succèdent pas, entre ces deux requêtes il y a toujours d'autres logs. j'ai besoin de calculer la durée de traitement, qui est la date de la request - la date de la response.

La solution que j'ai mise en place est la suivante :

```auto
if [request]
{ aggregate 
                    { 
                        task_id => "%{RequestId}"
                        code => " map['request-time'] = event.get('request-time')"
                        map_action => "create"
                    }
)

if [response]
{
aggregate 
	{                
	task_id => "%{RequestId}"
	code => "event.set('request-time', map['request-time'])"
	map_action => "update"
	end_of_task => true
	timeout => 30
   	timeout_tags => ['_aggregatetimeout']
	}
}

```

Je récupère la request-time et je l'ajoute au log de reponse pour ensuite faire un calcul simple à l'aide de ruby ( service-time = request-time - response-time)

les logs sont de ce format :

```auto
2020-01-17 00:04:01,259 INFO [lean.kernel.impl.utils.PayloadLoggerImpl] (default task-91) 
LEAN-REQUEST > Service : LoginService {" RequestHeader" : { "Date" : "Fri Jan 17 00:04:01 WET 2020", "SessionId" : "", "RequestId" : "157921" } 

2020-01-17 00:04:13,098 ERROR [lean.kernel.impl.dao.controls.MessageDaoImpl] (default task-91) WARNING/Error : FIND_BY_CODE >> Table : MESSAGE >> Code = app_release_control NOT FOUND 

2020-01-17 00:04:13,098 INFO [lean.kernel.impl.utils.PayloadLoggerImpl] (default task-91) 
LEAN-RESPONSE > Service : LoginService {" ResponseHeader" : { "Date" : "Fri Jan 17 00:04:13 WET 2020", "SessionId" : "", "RequestId" : "157921", "Response" : "Declined" } } 

```

Sauf que le problème est que sur des petites quantités de logs ça fonctionne très bien mais sur des grandes quantités, il arrive qu'un moment il ne calcule pas le service time parceque il ne récupère pas la request-time du map. J'ai une perte de presque 10% (c’est-à-dire que le calcul est fait correctement sur 90% des logs et n'est pas fait du tout sur les 10%).

Aussi quand j'ai varié le timeout, le nombre de logs non traités varie (parfois, c'est plus que 10% parfois c'est moins, 5%, 6% mais jamais moins)

Ps : quand j'isole les logs non traités et je les teste séparément le service-time est calculé, en sachant que la requestId est une clé unique.

Je vous remercie par avance pour vos réponses.

---

<div class="post-metadata">

**Author:** ![dadoonet](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/dadoonet/32/137187_2.png) [@dadoonet](https://discuss.elastic.co/u/dadoonet)\
**Post date:** [April 9, 2021, 9:11am UTC](https://discuss.elastic.co/t/probleme-avec-aggregate/269669/2 "2021-04-09T09:11:40Z")

</div>

Je pense que @fbaligand peut t'aider comme il a écrit ce code. 😁

Ne serait-ce pas dû au timeout ?

---

<div class="post-metadata">

**Author:** ![Yahya\_Bouzoubaa](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/yahya_bouzoubaa/32/85520_2.png) [@Yahya\_Bouzoubaa](https://discuss.elastic.co/u/Yahya_Bouzoubaa)\
**Post date:** [April 9, 2021, 9:24am UTC](https://discuss.elastic.co/t/probleme-avec-aggregate/269669/3 "2021-04-09T09:24:50Z")

</div>

Je vais je crois lui demander parcque c'est un vrai casse tête pour moi 🙂

Peut-être le timeout... mais du coup il faudrait le supprimer, (c'est ce que j'ai fait ... mais ça ne marche pas); mettre un timeout en particulier ? je ne pense pas que c'est aussi simple de définir le bon timeout..

---

<div class="post-metadata">

**Author:** ![fbaligand](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/fbaligand/32/5657_2.png) [@fbaligand](https://discuss.elastic.co/u/fbaligand)\
**Post date:** [April 9, 2021, 10:01am UTC](https://discuss.elastic.co/t/probleme-avec-aggregate/269669/4 "2021-04-09T10:01:44Z")

</div>

Bonjour,

J'ai 2 conseils pour toi :

- tout d'abord le "timeout" est le temps au bout duquel la map est purgée automatiquement (et donc perdue). Avec la valeur de "30", si tu as plus de 30s entre le log REQUEST et le log RESPONSE, tu perds l'info "request-time". Je t'invite donc à mettre plus que 30 comme timeout, pour ne rien louper.
- pour que le plugin fonctionne bien, il faut que les logs soient traités dans l'ordre : d'abord le le log REQUEST, puis le log RESPONSE. Pour garantir cet ordonnancement, il faut que le nombre de workers de ton pipeline soit égal à 1. Donc soit avec le flag `-w 1` au démarrage de logstash, soit avec `pipeline.workers: 1` dans la configuration logstash.yml ou pipelines.yml

---

<div class="post-metadata">

**Author:** ![fbaligand](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/fbaligand/32/5657_2.png) [@fbaligand](https://discuss.elastic.co/u/fbaligand)\
**Post date:** [April 9, 2021, 10:07am UTC](https://discuss.elastic.co/t/probleme-avec-aggregate/269669/5 "2021-04-09T10:07:29Z")

</div>

Petit bonus, n'hésites pas à utiliser mon extension vscode "Logstash Editor" pour avoir de la complétion, de la documentation intégrée et de l'auto-indentation pour ta configuration Logstash:  
[https://marketplace.visualstudio.com/items?itemName=fbaligand.vscode-logstash-editor](https://marketplace.visualstudio.com/items?itemName=fbaligand.vscode-logstash-editor)

Et si tu veux en savoir plus sur cette extension, tu peux venir voir ma prez sur le sujet la semaine prochaine au ElasticFR meetup 🙂

> **[Elastic Paris Meetup #60 : Logstash Editor | Elastic Community Events](https://community.elastic.co/events/details/elastic-france-presents-elastic-paris-meetup-60-logstash-editor/)**
>
> I'm attending Elastic Community Events France w/ Elastic Paris Meetup #60 : Logstash Editor on Apr 15, 2021

---

<div class="post-metadata">

**Author:** ![ylasri](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/ylasri/32/86120_2.png) [@ylasri](https://discuss.elastic.co/u/ylasri)\
**Post date:** [April 9, 2021, 10:54am UTC](https://discuss.elastic.co/t/probleme-avec-aggregate/269669/6 "2021-04-09T10:54:10Z")

</div>

Sinon vous pouvez compter sur doc\_as\_upsert de logstash elasticsearch output et corréler directement dans Elasticsearch 🙂

```auto
 output {
      elasticsearch {
        action => update
		doc_as_upsert => true
		document_id => "%{RequestId}"
      }
    }

```

> **[Elasticsearch output plugin | Logstash Reference \[7.12\] | Elastic](https://www.elastic.co/guide/en/logstash/7.12/plugins-outputs-elasticsearch.html#plugins-outputs-elasticsearch-doc_as_upsert)**

---

<div class="post-metadata">

**Author:** ![Yahya\_Bouzoubaa](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/yahya_bouzoubaa/32/85520_2.png) [@Yahya\_Bouzoubaa](https://discuss.elastic.co/u/Yahya_Bouzoubaa)\
**Post date:** [April 9, 2021, 3:51pm UTC](https://discuss.elastic.co/t/probleme-avec-aggregate/269669/7 "2021-04-09T15:51:39Z")

</div>

Merci à vous tous.  
au final ça marche, j'ai juste ajouté le `pipeline.workers: 1` dans logstash.yml.

sinon pour ta solution ylasri, je ne l'ai pas testé mais je le ferai ASAP.

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [May 7, 2021, 3:51pm UTC](https://discuss.elastic.co/t/probleme-avec-aggregate/269669/8 "2021-05-07T15:51:47Z")

</div>

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.
