Right, I think I misread that. However, that’s what the curation idea is for :)
—
Matt Sicker

> On Dec 1, 2023, at 18:47, Gary Gregory <garydgreg...@gmail.com> wrote:
> 
> Of course RE Volkan, my first sentence must have been poorly written. I
> meant to say that I know who Volkan is and that he is great, but, that's
> not the point. I was trying to say that a peronal GitHub account, in
> general, can't be compared to an official Apache account.
> 
> Gary
> 
> On Fri, Dec 1, 2023, 12:25 PM Matt Sicker <m...@musigma.org> wrote:
> 
>> I may be biased, but I wouldn’t consider Volkan a random GitHub user!
>> However, that does raise an interesting point: we could link to third party
>> plugins and such to help curate it.
>> 
>>> On Dec 1, 2023, at 5:00 AM, Gary Gregory <garydgreg...@gmail.com> wrote:
>>> 
>>> Hi all,
>>> 
>>> (Don't take his the wrong way Volkan ;-)
>>> Assuming that I don't know who you are, why would I pick a random github
>>> user's custom appender instead of an official Log4j appender? If your
>>> appender is "battle-tested", why not move it to Log4j (or Redis?)
>>> 
>>> Gary
>>> 
>>> 
>>> On Fri, Dec 1, 2023, 4:08 AM Volkan Yazıcı <vol...@yazi.ci> wrote:
>>> 
>>>> I appreciate your thoughts on this subject. We can eventually convert
>> this
>>>> into a chapter in the Log4j manual. My goal is to be able to make a
>>>> statement as follows:
>>>> 
>>>> *When Log4j is configured with Y, Y, Z settings, it can provide
>> guaranteed
>>>> delivery against certain types of log sinks such as A, B, C.*
>>>> 
>>>> *A – You need to make sure A has ... feature enabled. Further, it has
>> ...
>>>> caveat.*
>>>> *B – You need to make sure B has ... feature enabled and ...*
>>>> *C – ...*
>>>> 
>>>> 
>>>> That is, a cookbook for users with recipes for guaranteed delivery.
>>>> 
>>>> [I respond to your message below inline.]
>>>> 
>>>> On Thu, Nov 30, 2023 at 9:34 PM Ralph Goers <ralph.go...@dslextreme.com
>>> 
>>>> wrote:
>>>> 
>>>>> Notice that neither of the links you have provided use the term
>>>>> “guaranteed delivery”. That is because that is not really what they are
>>>>> providing. In addition, notice that Logstash says "Input plugins that
>> do
>>>>> not use a request-response protocol cannot be protected from data
>> loss”,
>>>> 
>>>> 
>>>> But see the rest of that statement
>>>> <
>>>> 
>> https://www.elastic.co/guide/en/logstash/current/persistent-queues.html#persistent-queues-limitations
>>>>> 
>>>> : *"Plugins such as beats and http, which do have an acknowledgement
>>>> capability, are well protected by this [Logstash persistent] queue."*
>>>> 
>>>> 
>>>>> and "Data may be lost if an abnormal shutdown occurs before the
>>>> checkpoint
>>>>> file has been committed”.
>>>> 
>>>> 
>>>> See the following statement further down in that page: *"To avoid losing
>>>> data in the persistent queue, you can set `queue.checkpoint.writes: 1`
>> to
>>>> force a checkpoint after each event is written."*
>>>> 
>>>> These two make me conclude that, if configured correctly (e.g., using
>>>> `http` plugin in combination with `queue.checkpoint.writes: 1`),
>> Logstash
>>>> can deliver guaranteed delivery. Am I mistaken?
>>>> 
>>>> 
>>>>> As for using Google Cloud that would default the whole point. If your
>>>> data
>>>>> center has lost contact with the outside world it won’t be able to get
>> to
>>>>> Google Cloud.
>>>>> 
>>>> 
>>>> But that cannot be an argument against using Google Cloud as a log sink
>>>> with guaranteed delivery. An in-house Flume server can go down too. Let
>> me
>>>> know if I miss your point here.
>>>> 
>>>> 
>>>>> While Redis would work it would require a) an application component
>> that
>>>>> interacts with Redis such as a Redis Appender (which we don’t have) b)
>> a
>>>>> Redis deployment c) a Logstash (or some other Redis consumer) to
>> forward
>>>>> the event. It is a lot simpler to configure Flume than to do all of
>> that.
>>>>> 
>>>> 
>>>> For one, there is a battle-tested Log4j Redis Appender
>>>> <https://github.com/vy/log4j2-redis-appender>, which enabled us to
>> remove
>>>> `log4j-redis` in `main`.
>>>> 
>>>> Indeed, Flume can deliver what Redis+Logstash do. Though my point is,
>> not
>>>> that Redis has a magical feature set, but there *are* several log sink
>>>> stacks one can build using modern stock components and provide
>> guaranteed
>>>> delivery. I would like to document some of those, if not best-practices,
>>>> known-to-work solutions. This way we can enable our users to make a
>>>> well-informed decision and pick the best approach that fits into their
>>>> existing stack.
>>>> 
>>>> On Thu, Nov 30, 2023 at 9:34 PM Ralph Goers <ralph.go...@dslextreme.com
>>> 
>>>> wrote:
>>>> 
>>>>> Volkan,
>>>>> 
>>>>> Notice that neither of the links you have provided use the term
>>>>> “guaranteed delivery”. That is because that is not really what they are
>>>>> providing. In addition, notice that Logstash says "Input plugins that
>> do
>>>>> not use a request-response protocol cannot be protected from data
>> loss”,
>>>>> and "Data may be lost if an abnormal shutdown occurs before the
>>>> checkpoint
>>>>> file has been committed”. Note that Flume’s FileChannel does not face
>> the
>>>>> second issue while the first would also be a problem if it is using a
>>>>> source that doesn’t support acknowledgements.However, Log4j’s
>>>> FlumeAppender
>>>>> always gets acks.
>>>>> 
>>>>> To make this clearer let me review the architecture for my
>> implementation
>>>>> again.
>>>>> 
>>>>> First the phone system maintains a list of ip addresses that can handle
>>>>> Radius accounting records. We host 2 Flume servers in the same data
>>>> center
>>>>> as the phone system and configure the phone system with their ip
>>>> addresses.
>>>>> The Radius records will be sent to those Flume servers which will
>> accept
>>>>> them with our custom Radius Source. That converts them to JSON and
>> passes
>>>>> the JSON to the File Channel. Once the File Channel has written them to
>>>>> disk the source responds back to the phone system with an ACK that the
>>>>> record was received. It the record is not processed quickly enough (I
>>>>> believe it is 100ms) then the phone system will try a different ip
>>>> address
>>>>> assuming it couldn’t be delivered by the first server.  Another thread
>>>>> reads the records from the File Channel and sends them to a Flume in a
>>>>> different data center for processing. This follows the same pattern.
>> The
>>>>> Avro Sink serializes the record and sends it to the target Flume. That
>>>>> Flume writes the record to a File channel and the Avro Source responds
>>>> with
>>>>> an ACK that the record was received, at which point the originating
>> Flume
>>>>> will remove it from the File Channel.
>>>>> 
>>>>> If you will notice, the application itself knows that delivery is
>>>>> guaranteed because it gets an ACK to say so. Due to this, Filbeat
>> cannot
>>>>> possibly implement guaranteed delivery. The application will expect
>> that
>>>>> once it writes to a file or to System.out delivery is guaranteed, which
>>>>> really cannot be true.
>>>>> 
>>>>> As for using Google Cloud that would default the whole point. If your
>>>> data
>>>>> center has lost contact with the outside world it won’t be able to get
>> to
>>>>> Google Cloud.
>>>>> 
>>>>> While Redis would work it would require a) an application component
>> that
>>>>> interacts with Redis such as a Redis Appender (which we don’t have) b)
>> a
>>>>> Redis deployment c) a Logstash (or some other Redis consumer) to
>> forward
>>>>> the event. It is a lot simpler to configure Flume than to do all of
>> that.
>>>>> 
>>>>> Ralph
>>>>> 
>>>>> 
>>>>>> On Nov 30, 2023, at 4:32 AM, Volkan Yazıcı <vol...@yazi.ci> wrote:
>>>>>> 
>>>>>> Ralph, could you elaborate on your response, please? AFAIK, Logstash
>>>> and
>>>>> Filebeat provide guaranteed delivery, if configured correctly. As a
>>>> matter
>>>>> of fact they have docs (here and here) explaining how to do it –
>>>> actually,
>>>>> there are several ways on how to do it. What makes you think they don't
>>>>> provide guaranteed delivery?
>>>>>> 
>>>>>> I have implemented two different types of logging pipelines with
>>>>> guaranteed delivery:
>>>>>>   •
>>>>>> Using a Google Cloud BigQuery appender
>>>>>>   • Using a Redis appender (Redis queue is ingested to Elasticsearch
>>>>> through Logstash)
>>>>>> I want to learn where I can potentially violate the delivery
>> guarantee.
>>>>>> 
>>>>>> On Thu, Nov 30, 2023 at 5:54 AM Ralph Goers <
>>>> ralph.go...@dslextreme.com>
>>>>> wrote:
>>>>>> Fluentbit, Fluentd, Logstash, and Filebeat are the main tools used for
>>>>> log forwarding. While they all have some amount of plugability none of
>>>> the
>>>>> are as flexible as Flume. In addition, as I have mentioned before, none
>>>> of
>>>>> them provide guaranteed delivery so I would never recommend them for
>>>>> forwarding audit logs.
>>>>> 
>>>>> 
>>>> 
>> 
>> 

Reply via email to