Skip to content

Commit

Permalink
Add logging relation to seldon-core (#259)
Browse files Browse the repository at this point in the history
* Add logging relation to seldon-core

Use LogForwarder from loki_push_api library to forwards all logs from
workload container to Loki. This requires to use ops 2.9 or newer, so it
was needed to be updated.

fixes: #253

* bump all integration requirements

We are testing on Juju 3.5, but we use libjuju 3.2.2. This version do
not support websockets 12.0, however on my system I reqire to have
at-least 10.0.
  • Loading branch information
rgildein authored Jul 11, 2024
1 parent 00f0198 commit 45aec2c
Show file tree
Hide file tree
Showing 9 changed files with 2,930 additions and 229 deletions.
2,750 changes: 2,750 additions & 0 deletions lib/charms/loki_k8s/v1/loki_push_api.py

Large diffs are not rendered by default.

3 changes: 3 additions & 0 deletions metadata.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,9 @@ requires:
gateway-info:
interface: istio-gateway-info
limit: 1
logging:
interface: loki_push_api
optional: true
provides:
metrics-endpoint:
interface: prometheus_scrape
Expand Down
3 changes: 3 additions & 0 deletions requirements-integration.in
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,6 @@ pytest-operator
pyyaml
requests
tenacity
# Pin to >=0.4.0 because the reusable test infrastructure is on that version and above
# This prevents pip-compile from trying to pin an earlier version
charmed-kubeflow-chisme>=0.4.0
168 changes: 102 additions & 66 deletions requirements-integration.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,25 +4,27 @@
#
# pip-compile requirements-integration.in
#
aiohttp==3.8.6
aiohttp==3.9.5
# via -r requirements-integration.in
aiosignal==1.3.1
# via aiohttp
anyio==4.0.0
# via httpcore
asttokens==2.4.0
anyio==4.4.0
# via httpx
asttokens==2.4.1
# via stack-data
async-timeout==4.0.3
# via aiohttp
attrs==23.1.0
# via aiohttp
attrs==23.2.0
# via
# aiohttp
# jsonschema
backcall==0.2.0
# via ipython
bcrypt==4.0.1
bcrypt==4.1.3
# via paramiko
cachetools==5.3.1
cachetools==5.3.3
# via google-auth
certifi==2023.7.22
certifi==2024.7.4
# via
# httpcore
# httpx
Expand All @@ -32,42 +34,46 @@ cffi==1.16.0
# via
# cryptography
# pynacl
charset-normalizer==3.3.0
# via
# aiohttp
# requests
cryptography==41.0.4
charmed-kubeflow-chisme==0.4.2
# via -r requirements-integration.in
charset-normalizer==3.3.2
# via requests
cryptography==42.0.8
# via paramiko
decorator==5.1.1
# via
# ipdb
# ipython
exceptiongroup==1.1.3
deepdiff==6.2.1
# via charmed-kubeflow-chisme
exceptiongroup==1.2.1
# via
# anyio
# pytest
executing==2.0.0
executing==2.0.1
# via stack-data
frozenlist==1.4.0
frozenlist==1.4.1
# via
# aiohttp
# aiosignal
google-auth==2.23.3
google-auth==2.32.0
# via kubernetes
h11==0.14.0
# via httpcore
httpcore==0.18.0
httpcore==1.0.5
# via httpx
httpx==0.25.0
httpx==0.27.0
# via lightkube
hvac==1.2.1
hvac==2.3.0
# via juju
idna==3.4
idna==3.7
# via
# anyio
# httpx
# requests
# yarl
importlib-resources==6.4.0
# via jsonschema
iniconfig==2.0.0
# via pytest
ipdb==0.13.13
Expand All @@ -76,27 +82,33 @@ ipython==8.12.3
# via ipdb
jedi==0.19.1
# via ipython
jinja2==3.1.2
jinja2==3.1.4
# via
# -r requirements-integration.in
# charmed-kubeflow-chisme
# pytest-operator
juju==3.2.2
jsonschema==4.17.3
# via serialized-data-interface
juju==3.5.0.0
# via
# -r requirements-integration.in
# charmed-kubeflow-chisme
# pytest-operator
kubernetes==28.1.0
kubernetes==30.1.0
# via juju
lightkube==0.14.0
# via -r requirements-integration.in
lightkube-models==1.28.1.4
lightkube==0.15.3
# via
# -r requirements-integration.in
# charmed-kubeflow-chisme
lightkube-models==1.30.0.8
# via lightkube
macaroonbakery==1.3.1
macaroonbakery==1.3.4
# via juju
markupsafe==2.1.3
markupsafe==2.1.5
# via jinja2
matplotlib-inline==0.1.6
matplotlib-inline==0.1.7
# via ipython
multidict==6.0.4
multidict==6.0.5
# via
# aiohttp
# yarl
Expand All @@ -106,39 +118,47 @@ oauthlib==3.2.2
# via
# kubernetes
# requests-oauthlib
packaging==23.2
# via pytest
paramiko==2.12.0
ops==2.14.1
# via
# charmed-kubeflow-chisme
# serialized-data-interface
ordered-set==4.1.0
# via deepdiff
packaging==24.1
# via
# juju
# pytest
paramiko==3.4.0
# via juju
parso==0.8.3
parso==0.8.4
# via jedi
pexpect==4.8.0
pexpect==4.9.0
# via ipython
pickleshare==0.7.5
# via ipython
pluggy==1.3.0
pkgutil-resolve-name==1.3.10
# via jsonschema
pluggy==1.5.0
# via pytest
prompt-toolkit==3.0.39
prompt-toolkit==3.0.47
# via ipython
protobuf==3.20.3
protobuf==5.27.2
# via macaroonbakery
ptyprocess==0.7.0
# via pexpect
pure-eval==0.2.2
# via stack-data
pyasn1==0.5.0
pyasn1==0.6.0
# via
# juju
# pyasn1-modules
# rsa
pyasn1-modules==0.3.0
pyasn1-modules==0.4.0
# via google-auth
pycparser==2.21
pycparser==2.22
# via cffi
pygments==2.16.1
pygments==2.18.0
# via ipython
pyhcl==0.4.5
# via hvac
pymacaroons==0.13.0
# via macaroonbakery
pynacl==1.5.0
Expand All @@ -150,78 +170,94 @@ pyrfc3339==1.1
# via
# juju
# macaroonbakery
pytest==7.4.2
pyrsistent==0.20.0
# via jsonschema
pytest==8.2.2
# via
# pytest-asyncio
# pytest-operator
pytest-asyncio==0.21.1
pytest-asyncio==0.21.2
# via pytest-operator
pytest-operator==0.29.0
pytest-operator==0.35.0
# via -r requirements-integration.in
python-dateutil==2.8.2
python-dateutil==2.9.0.post0
# via kubernetes
pytz==2023.3.post1
pytz==2024.1
# via pyrfc3339
pyyaml==6.0.1
# via
# -r requirements-integration.in
# juju
# kubernetes
# lightkube
# ops
# pytest-operator
requests==2.31.0
# serialized-data-interface
requests==2.32.3
# via
# -r requirements-integration.in
# hvac
# kubernetes
# macaroonbakery
# requests-oauthlib
requests-oauthlib==1.3.1
# serialized-data-interface
requests-oauthlib==2.0.0
# via kubernetes
rsa==4.9
# via google-auth
ruamel-yaml==0.18.6
# via charmed-kubeflow-chisme
ruamel-yaml-clib==0.2.8
# via ruamel-yaml
serialized-data-interface==0.7.0
# via charmed-kubeflow-chisme
six==1.16.0
# via
# asttokens
# kubernetes
# macaroonbakery
# paramiko
# pymacaroons
# python-dateutil
sniffio==1.3.0
sniffio==1.3.1
# via
# anyio
# httpcore
# httpx
stack-data==0.6.3
# via ipython
tenacity==8.2.3
# via -r requirements-integration.in
tenacity==8.5.0
# via
# -r requirements-integration.in
# charmed-kubeflow-chisme
tomli==2.0.1
# via
# ipdb
# pytest
toposort==1.10
# via juju
traitlets==5.11.2
traitlets==5.14.3
# via
# ipython
# matplotlib-inline
typing-extensions==4.8.0
typing-extensions==4.12.2
# via
# anyio
# ipython
# typing-inspect
typing-inspect==0.9.0
# via juju
urllib3==1.26.18
urllib3==2.2.2
# via
# kubernetes
# requests
wcwidth==0.2.8
wcwidth==0.2.13
# via prompt-toolkit
websocket-client==1.6.4
# via kubernetes
websockets==8.1
websocket-client==1.8.0
# via
# kubernetes
# ops
websockets==12.0
# via juju
yarl==1.9.2
yarl==1.9.4
# via aiohttp
zipp==3.19.2
# via importlib-resources
6 changes: 3 additions & 3 deletions requirements-unit.txt
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ charmed-kubeflow-chisme==0.2.0
# via -r requirements.in
charset-normalizer==3.2.0
# via requests
cosl==0.0.11
cosl==0.0.12
# via -r requirements.in
coverage==7.3.1
# via -r requirements-unit.in
Expand Down Expand Up @@ -56,7 +56,7 @@ lightkube-models==1.28.1.4
# lightkube
markupsafe==2.1.3
# via jinja2
ops==2.6.0
ops==2.14.1
# via
# -r requirements-unit.in
# -r requirements.in
Expand Down Expand Up @@ -93,7 +93,7 @@ requests==2.31.0
# via serialized-data-interface
ruamel-yaml==0.17.32
# via charmed-kubeflow-chisme
ruamel-yaml-clib==0.2.7
ruamel-yaml-clib==0.2.8
# via ruamel-yaml
serialized-data-interface==0.7.0
# via charmed-kubeflow-chisme
Expand Down
4 changes: 2 additions & 2 deletions requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ charmed-kubeflow-chisme==0.2.0
# via -r requirements.in
charset-normalizer==3.2.0
# via requests
cosl==0.0.11
cosl==0.0.12
# via -r requirements.in
deepdiff==6.2.1
# via charmed-kubeflow-chisme
Expand Down Expand Up @@ -50,7 +50,7 @@ lightkube-models==1.28.1.4
# lightkube
markupsafe==2.1.3
# via jinja2
ops==2.6.0
ops==2.14.1
# via
# -r requirements.in
# charmed-kubeflow-chisme
Expand Down
2 changes: 2 additions & 0 deletions src/charm.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
from charmed_kubeflow_chisme.lightkube.batch import delete_many
from charms.grafana_k8s.v0.grafana_dashboard import GrafanaDashboardProvider
from charms.istio_pilot.v0.istio_gateway_info import GatewayRelationError, GatewayRequirer
from charms.loki_k8s.v1.loki_push_api import LogForwarder
from charms.observability_libs.v1.kubernetes_service_patch import KubernetesServicePatch
from charms.prometheus_k8s.v0.prometheus_scrape import MetricsEndpointProvider
from lightkube import ApiError
Expand Down Expand Up @@ -169,6 +170,7 @@ def __init__(self, *args):
self.framework.observe(self.on.seldon_core_pebble_ready, self._on_pebble_ready)
self.framework.observe(self.on.remove, self._on_remove)
self.framework.observe(self.on.stop, self._on_stop)
self._logging = LogForwarder(charm=self)

@property
def container(self):
Expand Down
Loading

0 comments on commit 45aec2c

Please sign in to comment.