Tutorial — Lastausgleich von Syslog-Meldungen mithilfe von Protokollerweiterungen

Das auf der NetScaler-Appliance verfügbare Syslog-Protokoll funktioniert nur für die auf der NetScaler-Appliance generierten Nachrichten. Es führt keinen Lastenausgleich für die von externen Knoten kommenden Nachrichten durch. Um den Lastenausgleich solcher Nachrichten zu erreichen, müssen Sie die Funktion für Protokollerweiterungen verwenden und die Logik zum Analysieren von Syslog-Nachrichten mithilfe der Programmiersprache Lua 5.2 schreiben.

Code zum Analysieren von Syslog-Nachrichten

Im Code ist nur die TCP-Client-Daten-Callback-Funktion definiert - client.on_data (). Für Serverdaten wird keine Callback-Funktion hinzugefügt und der Server zum Client verwendet den schnellen nativen Pfad. Der Code identifiziert die Nachrichtengrenze anhand des nachfolgenden Zeichens. Wenn das TCP-Paket mehr als eine Syslog-Nachrichten enthält, teilen wir das Paket basierend auf dem nachfolgenden Zeichen und Lastverteilung jeder Nachricht.

--[[

  Syslog event handler for TCP client data

    ctxt - TCP client side App processing context.

    data - TCP Data stream received.

--]]

function client.on_data(ctxt, payload)

                  local message = nil

                  local data_len

                  local data = payload.data

                  local trailing_character = "\n"

                  ::split_message::

                                    -- Get the offset of trailing character

                                    local new_line_character_offset = data:find(trailing_character)

                                    -- If trailing character is not found, then wait for more data.

                                    if (not new_line_character_offset) then

                                                      goto need_more_data

                                    end

                                    -- Get the length of the current message

                                    data_len = data:len()

                                    -- Check whether we have more than one message

                                    -- by comparing trailing character offset and

                                    -- current data length

                                    if (data_len > new_line_character_offset) then

                                                      -- If we have more than one message, then split

                                                      -- the data into two parts such that first part

                                                      -- will contain message upto trailing character

                                                      -- offset and second part will contain

                                                      -- remaining message.

                                                      message, data = data:split(new_line_character_offset)

                                    else

                                                      message = data

                                                      data = nil

                                    end

-- Send the data to the backend server.

                                    ns.send(ctxt.output, "EOM", {data = message})

                                    goto done

                                    ::need_more_data::

                                                      -- Wait for more data

                                                      ctxt:hold(data)

                                                      data = nil

                                                      goto done

                                    ::done::

                                                      -- If we have more data to parse,

                                                      -- then do parsing again.

                                                      if (data) then

                                                                        goto split_message

                                                      end

end
<!--NeedCopy-->
Tutorial — Lastausgleich von Syslog-Meldungen mithilfe von Protokollerweiterungen