Skip to content

Commit

Permalink
add support for fluent logging
Browse files Browse the repository at this point in the history
  • Loading branch information
Keith Grennan committed Aug 3, 2023
1 parent 2bf6698 commit 380c49f
Show file tree
Hide file tree
Showing 8 changed files with 161 additions and 2 deletions.
2 changes: 2 additions & 0 deletions be/levity/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -139,3 +139,5 @@
)

OCPP_HEARTBEAT_INTERVAL = 3600

FLUENTD_HOST = os.environ.get("FLUENTD_HOST")
4 changes: 3 additions & 1 deletion be/ocpp/models/message.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,9 @@ def to_ocpp(self):
else:
raise ValueError("Unknown message type {}".format(self.message_type))

return dict(id=self.charge_point.id, message=ocpp_message)
return dict(
id=self.charge_point.id, actor=str(self.actor), message=ocpp_message
)

@staticmethod
def from_occp(charge_point: ChargePoint, ocpp_message: dict):
Expand Down
1 change: 1 addition & 0 deletions be/ocpp/receivers/__init__.py
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
from .metrics.event_counter import count_websocket_events # noqa: F401
from .logging.fluent_logger import log_messages, log_websocket_events # noqa: F401
27 changes: 27 additions & 0 deletions be/ocpp/receivers/logging/fluent_logger.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
from django.db.models.signals import post_save
from django.dispatch import receiver
from fluent import sender

from levity import settings
from ocpp.models import WebsocketEvent, Message


logger = (
sender.FluentSender("app", host=settings.FLUENTD_HOST, port=24224)
if settings.FLUENTD_HOST
else None
)


@receiver(post_save, sender=WebsocketEvent)
def log_websocket_events(instance: WebsocketEvent, created, **kwargs):
if not logger:
return
logger.emit(f"ws.{instance.type}", dict(id=instance.charge_point.id))


@receiver(post_save, sender=Message)
def log_messages(instance: Message, created, **kwargs):
if not logger:
return
logger.emit("message", instance.to_ocpp())
88 changes: 87 additions & 1 deletion be/poetry.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions be/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ psycopg2-binary = "^2.9.5"
prometheus-client = "^0.16.0"
pyyaml = "6.0.1"
pytz = "^2023.3"
fluent-logger = "^0.10.0"


[tool.poetry.group.dev.dependencies]
Expand Down
20 changes: 20 additions & 0 deletions fluentd/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
FROM fluent/fluentd:v1.16-1

# Use root account to use apk
USER root

# below RUN includes plugin as examples elasticsearch is not required
# you may customize including plugins as you wish
RUN apk add --no-cache --update --virtual .build-deps \
sudo build-base ruby-dev \
&& sudo gem install fluent-plugin-s3 \
&& sudo gem sources --clear-all \
&& apk del .build-deps \
&& rm -rf /tmp/* /var/tmp/* /usr/lib/ruby/gems/*/cache/*.gem

COPY fluent.conf /fluentd/etc/

RUN mkdir -p /var/log/fluent
RUN chown -R fluent /var/log/fluent

USER fluent
20 changes: 20 additions & 0 deletions fluentd/fluent.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
<source>
@type forward
</source>

<match *>
@type s3

s3_bucket levity
s3_region us-west-2
path logs/
<instance_profile_credentials>
</instance_profile_credentials>
<buffer tag,time>
@type file
path /var/log/fluent/s3
timekey 3600 # 1 hour partition
timekey_wait 10m
timekey_use_utc true # use utc
</buffer>
</match>

0 comments on commit 380c49f

Please sign in to comment.