Skip to content

Commit 8012534

Browse files
committed
fix: visualiza successfully all logs from a python project
1 parent 8dbdd65 commit 8012534

15 files changed

+285
-60
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,3 +166,4 @@ datasets/*
166166
anod_env/*
167167
grafana/note.md
168168
# /data
169+
note.md

Makefile

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,32 @@ define anod_env
1818
conda create -p anod_env python==3.9 -y
1919
endef
2020

21+
## # MONITORING # ##
2122

23+
.PHONY: up
24+
up:
25+
docker compose -f docker-compose.yaml up -d --build
26+
27+
.PHONY: down
28+
down:
29+
docker compose down
30+
31+
# logs_name ?= grafana
32+
.PHONY: logs
33+
logs:
34+
docker compose logs otel-collector loki grafana prometheus alertmanager
35+
# ifeq (${logs_name},true)
36+
# echo "Getting logs... Please wait..."
37+
# git commit -m "${message}"
38+
# git push origin ${branch}
39+
40+
# else ifeq (${status}, false)
41+
# echo "Withdrawing commit message..."
42+
# git reset
43+
44+
45+
46+
## # TESTING # ##
2247

2348
.PHONY: test
2449
test:

docker-compose.yaml

Lines changed: 44 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,20 @@
1-
version: '3'
1+
version: '3.5'
22
services:
3+
# anod_demo:
4+
# image: anod_demo:latest
5+
# labels:
6+
# logging: "promtail"
7+
# logging_jobname: "containerlogs"
8+
# ports:
9+
# - 8080:80
10+
# volumes:
11+
# - ./Dockerfile:/Dockerfile
12+
# networks:
13+
# - loki
14+
# depends_on:
15+
# - loki
16+
17+
318
otel-collector:
419
image: otel/opentelemetry-collector:latest
520
volumes:
@@ -12,16 +27,16 @@ services:
1227
depends_on:
1328
- loki
1429
networks:
15-
- loki
30+
- loki_network
1631
loki:
17-
image: grafana/loki:main
32+
image: grafana/loki:latest
1833
ports:
1934
- "3100:3100"
2035
volumes:
2136
- ./grafana/loki_config.yaml:/etc/loki/local-config.yaml
2237
command: -config.file=/etc/loki/local-config.yaml
2338
networks:
24-
- loki
39+
- loki_network
2540
grafana:
2641
image: grafana/grafana:latest
2742
environment:
@@ -31,28 +46,48 @@ services:
3146
- GF_FEATURE_TOGGLES_ENABLE=accessControlOnCall
3247
- GF_INSTALL_PLUGINS=https://storage.googleapis.com/integration-artifacts/grafana-lokiexplore-app/grafana-lokiexplore-app-latest.zip;grafana-lokiexplore-app
3348
ports:
34-
- 3000:3000/tcp
49+
- "3000:3000/tcp"
3550
volumes:
3651
- ./grafana:/etc/grafana/provisioning
3752
networks:
38-
- loki
53+
- loki_network
3954

4055
prometheus:
4156
image: prom/prometheus
4257
volumes:
43-
- ./grafana/prometheus/prometheus.yaml:/etc/prometheus/prometheus.yaml # Mount the prometheus.yml file
58+
- ./grafana/prometheus/prometheus/prometheus.yaml:/etc/prometheus/prometheus.yaml # Mount the prometheus.yml file
4459
ports:
4560
- "9090:9090" # Expose port 9090 for Prometheus
61+
networks:
62+
- loki_network
4663

4764
alertmanager:
4865
image: prom/alertmanager
4966
volumes:
50-
- ./grafana/prometheus/alertmanager.yaml:/etc/alertmanager/alertmanager.yaml # Mount the alertmanager.yml file
67+
- ./grafana/prometheus/alertmanager/alertmanager.yaml:/etc/alertmanager/alertmanager.yaml # Mount the alertmanager.yml file
5168
ports:
5269
- "9093:9093" # Expose port 9093 for Alertmanager
70+
networks:
71+
- loki_network
72+
promtail:
73+
image: grafana/promtail:latest
74+
container_name: promtail
75+
volumes:
76+
- ./grafana//promtail.yaml:/etc/promtail/docker-config.yaml
77+
- /var/lib/docker/containers:/var/lib/docker/containers:ro
78+
- /var/run/docker.sock:/var/run/docker.sock
79+
- ./src/artifacts/logs/running_logs.log:/var/log/running_logs.log
80+
command: -config.file=/etc/promtail/docker-config.yaml
81+
depends_on:
82+
- loki
83+
networks:
84+
- loki_network
5385

5486
networks:
55-
loki:
87+
loki_network:
88+
driver: bridge
89+
external: true
90+
5691

5792

5893

grafana/datasources/default.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,6 @@ datasources:
44
type: loki
55
access: proxy
66
url: http://loki:3100
7+
version: 1
8+
editable: false
9+
isDefault: true

grafana/loki_config.yaml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,4 +37,8 @@ storage_config:
3737
directory: /tmp/loki/chunks
3838

3939
pattern_ingester:
40-
enabled: true
40+
enabled: true
41+
42+
ruler:
43+
alertmanager_url: http://localhost:9093
44+

grafana/otel_config.yaml

Lines changed: 41 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,16 @@ receivers:
44
protocols:
55
grpc:
66
endpoint: 0.0.0.0:4317
7-
insecure: true
7+
# insecure: true
88
http:
99
endpoint: 0.0.0.0:4318
10+
prometheus:
11+
config:
12+
scrape_configs:
13+
- job_name: otel-collector
14+
scrape_interval: 5s
15+
static_configs:
16+
- targets: [localhost:8889]
1017

1118

1219
# Processors
@@ -17,25 +24,43 @@ processors:
1724

1825
# Exporters
1926
exporters:
27+
prometheus/metrics:
28+
endpoint: "0.0.0.0:8889"
29+
# tls:
30+
# insecure: true
31+
# labels:
32+
# job: "prometheus"
33+
2034
otlphttp/logs:
2135
endpoint: "http://loki:3100/otlp"
2236
tls:
2337
insecure: true
2438

39+
40+
41+
42+
2543

2644
# Pipelines
27-
services:
28-
otlp:
29-
pipelines:
30-
traces:
31-
receivers: [otlp]
32-
processors: [batch]
33-
exporters: [otlphttp/logs]
34-
metrics:
35-
receivers: [otlp]
36-
processors: [batch]
37-
exporters: [otlphttp/logs]
38-
logs:
39-
receivers: [otlp]
40-
processors: [batch]
41-
exporters: [otlphttp/logs]
45+
service:
46+
pipelines:
47+
# traces:
48+
# receivers: [otlp]
49+
# processors: [batch]
50+
# exporters: [otlphttp]
51+
# metrics:
52+
# receivers: [otlp]
53+
# processors: [batch]
54+
# exporters: [otlphttp]
55+
# logs:
56+
# receivers: [otlp]
57+
# processors: [batch]
58+
# exporters: [otlphttp/logs]
59+
metrics:
60+
receivers: [otlp]
61+
processors: [batch]
62+
exporters: [prometheus/metrics]
63+
logs:
64+
receivers: [otlp]
65+
processors: [batch]
66+
exporters: [otlphttp/logs]

grafana/prometheus/prometheus.yaml

Lines changed: 0 additions & 9 deletions
This file was deleted.
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
global:
2+
scrape_interval: 15s # Scrape metrics every 15 seconds
3+
4+
scrape_configs:
5+
- job_name: 'otel-collector' # Name of the job for scraping our app
6+
scrape_interval: 5s # Scrape metrics every 15 seconds
7+
static_configs:
8+
- targets: ['localhost:8889'] # Target to scrape (our app)
9+
# - targets: ['host.docker.internal:4000'] # Target to scrape (our app)
10+
rule_files:
11+
- './alertmanager/alert.rules.yml'

grafana/promtail.yaml

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
# server:
2+
# http_listen_port: 9080
3+
# grpc_listen_port: 0
4+
5+
# positions:
6+
# filename: /tmp/positions.yaml
7+
8+
# clients:
9+
# - url: http://loki:3100/loki/api/v1/push
10+
11+
# scrape_configs:
12+
# - job_name: flog_scrape
13+
# docker_sd_configs:
14+
# - host: unix:///var/run/docker.sock
15+
# refresh_interval: 5s
16+
# filters:
17+
# - name: label
18+
# values: ["logging=promtail"]
19+
# relabel_configs:
20+
# - source_labels: ['__meta_docker_container_name']
21+
# regex: '/(.*)'
22+
# target_label: 'container'
23+
# - source_labels: ['__meta_docker_container_log_stream']
24+
# target_label: 'logstream'
25+
# - source_labels: ['__meta_docker_container_label_logging_jobname']
26+
# target_label: 'job'
27+
28+
server:
29+
http_listen_port: 9080
30+
grpc_listen_port: 0
31+
32+
positions:
33+
filename: /tmp/positions.yaml
34+
35+
clients:
36+
- url: http://loki:3100/loki/api/v1/push
37+
38+
scrape_configs:
39+
- job_name: python-logs
40+
static_configs:
41+
- targets:
42+
- localhost
43+
labels:
44+
job: "python-logs"
45+
__path__: /var/log/running_logs.log

requirements.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ mkdocs-material==9.5.42
3232
## logs and alerting
3333
opentelemetry-distro==0.48b0
3434
opentelemetry-exporter-otlp==1.27.0
35+
python-logging-loki
3536

3637

3738
## dev

src/ano_detection/logger/grafana_logs_config.py

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ class GrafanaLogsConfig:
2323
GrafanaLogsConfig: sets up logging using OpenTelemetry with a specified service name and instance ID.
2424
"""
2525

26-
def __init__(self, service_name, instance_id, endpoint="otel-collector:4317"):
26+
def __init__(self, service_name, instance_id, endpoint="http://loki:3100/loki/metrics"):
2727
"""
2828
Initialize the GrafanaLogsConfig: with a service name and instance ID.
2929
@@ -52,30 +52,30 @@ def setup_logging(self, notset):
5252
Returns:
5353
LoggingHandler instance configured with the logger provider.
5454
"""
55-
try:
56-
# Set the created LoggerProvider as the global logger provider.
57-
set_logger_provider(self.logger_provider)
58-
59-
# Create an instance of OTLPLogExporter with insecure connection.
60-
exporter = OTLPLogExporter(endpoint="otel-collector:4317", insecure=True)
61-
62-
# Add a BatchLogRecordProcessor to the logger provider with the exporter.
63-
self.logger_provider.add_log_record_processor(BatchLogRecordProcessor(exporter))
64-
65-
print("Connected to OTLP exporter at", self.endpoint)
66-
67-
except RpcError as e:
68-
# Check for UNAVAILABLE status and set up console fallback
69-
if e.code() == StatusCode.UNAVAILABLE:
70-
print(f"Warning: OTLP endpoint '{self.endpoint}' unavailable. Using console logging as fallback.")
71-
self.logger_provider = LoggerProvider(resource=Resource.create(
72-
{
73-
"service.name": self.service_name,
74-
"service.instance.id": self.instance_id,
75-
}
76-
))
77-
set_logger_provider(self.logger_provider)
78-
# logging.getLogger().addHandler(logging.StreamHandler())
55+
# try:
56+
# Set the created LoggerProvider as the global logger provider.
57+
set_logger_provider(self.logger_provider)
58+
59+
# Create an instance of OTLPLogExporter with insecure connection.
60+
exporter = OTLPLogExporter(endpoint="otel-collector:4317", insecure=True)
61+
62+
# Add a BatchLogRecordProcessor to the logger provider with the exporter.
63+
self.logger_provider.add_log_record_processor(BatchLogRecordProcessor(exporter))
64+
65+
print("Connected to OTLP exporter at", self.endpoint)
66+
67+
# except RpcError as e:
68+
# # Check for UNAVAILABLE status and set up console fallback
69+
# if e.code() == StatusCode.UNAVAILABLE:
70+
# print(f"Warning: OTLP endpoint '{self.endpoint}' unavailable. Using console logging as fallback.")
71+
# self.logger_provider = LoggerProvider(resource=Resource.create(
72+
# {
73+
# "service.name": self.service_name,
74+
# "service.instance.id": self.instance_id,
75+
# }
76+
# ))
77+
# set_logger_provider(self.logger_provider)
78+
# # logging.getLogger().addHandler(logging.StreamHandler())
7979

8080
# Create a LoggingHandler with the specified logger provider and log level set to NOTSET.
8181
handler = LoggingHandler(level=notset, logger_provider=self.logger_provider)

0 commit comments

Comments
 (0)