@@ -440,6 +440,28 @@ int flb_log_get_level_str(char *str)
440
440
return -1 ;
441
441
}
442
442
443
+ static inline const char * flb_log_message_type_str (int type )
444
+ {
445
+ switch (type ) {
446
+ case FLB_LOG_HELP :
447
+ return "help" ;
448
+ case FLB_LOG_INFO :
449
+ return "info" ;
450
+ case FLB_LOG_WARN :
451
+ return "warn" ;
452
+ case FLB_LOG_ERROR :
453
+ return "error" ;
454
+ case FLB_LOG_DEBUG :
455
+ return "debug" ;
456
+ case FLB_LOG_IDEBUG :
457
+ return "debug" ;
458
+ case FLB_LOG_TRACE :
459
+ return "trace" ;
460
+ default :
461
+ return NULL ;
462
+ }
463
+ }
464
+
443
465
int flb_log_set_file (struct flb_config * config , char * out )
444
466
{
445
467
struct flb_log * log = config -> log ;
@@ -456,6 +478,78 @@ int flb_log_set_file(struct flb_config *config, char *out)
456
478
return 0 ;
457
479
}
458
480
481
+
482
+ /*
483
+ * Create and register cmetrics for the runtime logger.
484
+ * The caller must free the returned struct using flb_log_metrics_destroy.
485
+ */
486
+ struct flb_log_metrics * flb_log_metrics_create ()
487
+ {
488
+ struct flb_log_metrics * metrics ;
489
+ int i ;
490
+ const char * message_type_str ;
491
+ uint64_t ts ;
492
+ int ret ;
493
+
494
+ metrics = flb_calloc (1 , sizeof (struct flb_log_metrics ));
495
+ if (metrics == NULL ) {
496
+ flb_errno ();
497
+ return NULL ;
498
+ }
499
+
500
+ metrics -> cmt = cmt_create ();
501
+ if (!metrics -> cmt ) {
502
+ flb_free (metrics );
503
+ return NULL ;
504
+ }
505
+
506
+ metrics -> logs_total_counter = cmt_counter_create (metrics -> cmt ,
507
+ "fluentbit" ,
508
+ "logger" ,
509
+ "logs_total" ,
510
+ "Total number of logs" ,
511
+ 1 , (char * []) {"message_type" });
512
+ if (metrics -> logs_total_counter == NULL ) {
513
+ cmt_destroy (metrics -> cmt );
514
+ flb_free (metrics );
515
+ return NULL ;
516
+ }
517
+
518
+ /*
519
+ * Initialize counters for all log message types to 0.
520
+ * This assumes types are contiguous starting at 1 (FLB_LOG_ERROR).
521
+ */
522
+ ts = cfl_time_now ();
523
+ for (i = 1 ; ; i ++ ) {
524
+ message_type_str = flb_log_message_type_str (i );
525
+ if (!message_type_str ) {
526
+ break ;
527
+ }
528
+
529
+ ret = cmt_counter_set (metrics -> logs_total_counter ,
530
+ ts ,
531
+ 0 ,
532
+ 1 , (char * []) {message_type_str });
533
+ if (ret == -1 ) {
534
+ cmt_counter_destroy (metrics -> logs_total_counter );
535
+ cmt_destroy (metrics -> cmt );
536
+ flb_free (metrics );
537
+ return NULL ;
538
+ }
539
+ }
540
+
541
+ return metrics ;
542
+ }
543
+
544
+ /* Frees the metrics instance and its associated resources. */
545
+ void flb_log_metrics_destroy (struct flb_log_metrics * metrics )
546
+ {
547
+ cmt_counter_destroy (metrics -> logs_total_counter );
548
+ cmt_destroy (metrics -> cmt );
549
+ flb_free (metrics );
550
+ }
551
+
552
+
459
553
struct flb_log * flb_log_create (struct flb_config * config , int type ,
460
554
int level , char * out )
461
555
{
@@ -509,6 +603,16 @@ struct flb_log *flb_log_create(struct flb_config *config, int type,
509
603
return NULL ;
510
604
}
511
605
606
+ /* Create metrics */
607
+ log -> metrics = flb_log_metrics_create ();
608
+ if (log -> metrics == NULL ) {
609
+ fprintf (stderr , "[log] could not create log metrics\n" );
610
+ mk_event_loop_destroy (log -> evl );
611
+ flb_free (log );
612
+ config -> log = NULL ;
613
+ return NULL ;
614
+ }
615
+
512
616
/*
513
617
* Since the main process/thread might want to write log messages,
514
618
* it will need a 'worker-like' context, here we create a fake worker
@@ -566,28 +670,6 @@ struct flb_log *flb_log_create(struct flb_config *config, int type,
566
670
return log ;
567
671
}
568
672
569
- static inline char * flb_log_message_type_str (int type )
570
- {
571
- switch (type ) {
572
- case FLB_LOG_HELP :
573
- return "help" ;
574
- case FLB_LOG_INFO :
575
- return "info" ;
576
- case FLB_LOG_WARN :
577
- return "warn" ;
578
- case FLB_LOG_ERROR :
579
- return "error" ;
580
- case FLB_LOG_DEBUG :
581
- return "debug" ;
582
- case FLB_LOG_IDEBUG :
583
- return "debug" ;
584
- case FLB_LOG_TRACE :
585
- return "trace" ;
586
- default :
587
- return NULL ;
588
- }
589
- }
590
-
591
673
int flb_log_construct (struct log_message * msg , int * ret_len ,
592
674
int type , const char * file , int line , const char * fmt , va_list * args )
593
675
{
@@ -597,7 +679,7 @@ int flb_log_construct(struct log_message *msg, int *ret_len,
597
679
int total ;
598
680
time_t now ;
599
681
const char * header_color = NULL ;
600
- const char * header_title = flb_log_message_type_str ( type ) ;
682
+ const char * header_title ;
601
683
const char * bold_color = ANSI_BOLD ;
602
684
const char * reset_color = ANSI_RESET ;
603
685
struct tm result ;
@@ -647,6 +729,7 @@ int flb_log_construct(struct log_message *msg, int *ret_len,
647
729
return -1 ;
648
730
}
649
731
732
+ header_title = flb_log_message_type_str (type );
650
733
len = snprintf (msg -> msg , sizeof (msg -> msg ) - 1 ,
651
734
"%s[%s%i/%02i/%02i %02i:%02i:%02i%s]%s [%s%5s%s] " ,
652
735
/* time */ /* type */
@@ -721,8 +804,8 @@ void flb_log_print(int type, const char *file, int line, const char *fmt, ...)
721
804
int ret ;
722
805
struct log_message msg = {0 };
723
806
va_list args ;
724
- char * msg_type_str = flb_log_message_type_str ( type ) ;
725
- uint64_t ts = cfl_time_now () ;
807
+ const char * msg_type_str ;
808
+ uint64_t ts ;
726
809
727
810
struct flb_worker * w ;
728
811
struct flb_config * config ;
@@ -738,8 +821,10 @@ void flb_log_print(int type, const char *file, int line, const char *fmt, ...)
738
821
w = flb_worker_get ();
739
822
if (w ) {
740
823
config = w -> config ;
741
- if (config && config -> log_metrics_ctx ) {
742
- cmt_counter_inc (config -> log_metrics_ctx -> logs_total_counter , ts , 1 , (char * []) {msg_type_str }); // Ignoring inc error
824
+ if (config != NULL && config -> log != NULL ) {
825
+ msg_type_str = flb_log_message_type_str (type );
826
+ ts = cfl_time_now ();
827
+ cmt_counter_inc (config -> log -> metrics -> logs_total_counter , ts , 1 , (char * []) {msg_type_str }); // Ignoring inc error
743
828
}
744
829
745
830
n = flb_pipe_write_all (w -> log [1 ], & msg , sizeof (msg ));
@@ -801,79 +886,8 @@ int flb_log_destroy(struct flb_log *log, struct flb_config *config)
801
886
}
802
887
flb_log_worker_destroy (log -> worker );
803
888
flb_free (log -> worker );
889
+ flb_log_metrics_destroy (log -> metrics );
804
890
flb_free (log );
805
891
806
892
return 0 ;
807
893
}
808
-
809
- /*
810
- * Create and register cmetrics for the runtime logger.
811
- * The caller must free the returned struct using flb_log_metrics_destroy.
812
- */
813
- struct flb_log_metrics * flb_log_metrics_create ()
814
- {
815
- struct flb_log_metrics * lm ;
816
- int i ;
817
- char * message_type_str ;
818
- uint64_t ts ;
819
-
820
- lm = flb_calloc (1 , sizeof (struct flb_log_metrics ));
821
- if (!lm ) {
822
- flb_errno ();
823
- goto error ;
824
- }
825
-
826
- lm -> cmt = cmt_create ();
827
- if (!lm -> cmt ) {
828
- goto error ;
829
- }
830
-
831
- lm -> logs_total_counter = cmt_counter_create (lm -> cmt ,
832
- "fluentbit" , "logger" , "logs_total" ,
833
- "Total number of logs" ,
834
- 1 , (char * []) {"message_type" });
835
- if (!lm -> logs_total_counter ) {
836
- goto error ;
837
- }
838
-
839
- /*
840
- * Initialize counters for all log message types to 0.
841
- * This assumes types are contiguous starting at 1 (FLB_LOG_ERROR).
842
- */
843
- i = 1 ;
844
- ts = cfl_time_now ();
845
- for (i = 1 ; ; i ++ ) {
846
- message_type_str = flb_log_message_type_str (i );
847
- if (!message_type_str ) {
848
- break ;
849
- }
850
-
851
- if (cmt_counter_set (lm -> logs_total_counter , ts , 0 , 1 , (char * []) {message_type_str }) == -1 ) {
852
- goto error ;
853
- }
854
- }
855
-
856
- return lm ;
857
-
858
- error :
859
- if (lm && lm -> logs_total_counter ) {
860
- cmt_counter_destroy (lm -> logs_total_counter );
861
- }
862
-
863
- if (lm && lm -> cmt ) {
864
- cmt_destroy (lm -> cmt );
865
- }
866
-
867
- if (lm ) {
868
- flb_free (lm );
869
- }
870
-
871
- return NULL ;
872
- }
873
-
874
- void flb_log_metrics_destroy (struct flb_log_metrics * lm )
875
- {
876
- cmt_counter_destroy (lm -> logs_total_counter );
877
- cmt_destroy (lm -> cmt );
878
- flb_free (lm );
879
- }
0 commit comments