Skip to content

Instantly share code, notes, and snippets.

@vncsna
Created September 5, 2024 23:19
Show Gist options
  • Save vncsna/f1beef72b146089500d95c68af9942fc to your computer and use it in GitHub Desktop.
Save vncsna/f1beef72b146089500d95c68af9942fc to your computer and use it in GitHub Desktop.
Save aws logs to postgresql
import subprocess
import psycopg2
from psycopg2 import sql
conn = psycopg2.connect(dsn="postgresql://localhost:5432/vncsna")
cursor = conn.cursor()
cursor.execute(
"""
CREATE TABLE IF NOT EXISTS cloudwatch_logs (
timestamp TIMESTAMP,
log_group TEXT,
log_entry TEXT
)
"""
)
conn.commit()
def process_log_entry(timestamp, log_group, log_entry):
cursor.execute(
"INSERT INTO cloudwatch_logs (timestamp, log_group, log_entry) VALUES (%s, %s, %s)",
(timestamp, log_group, log_entry)
)
conn.commit()
def stream_logs_to_postgres(log_group):
process = subprocess.Popen(
['aws', 'logs', 'tail', log_group, '--follow', '--output', 'json'],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
universal_newlines=True
)
for line in process.stdout:
try:
timestamp, log_group, log_entry = line.strip().split(maxsplit=2)
process_log_entry(timestamp, log_group, log_entry)
except Exception as e:
print(f"Error processing log entry: {e}")
continue
if __name__ == "__main__":
stream_logs_to_postgres("<log-group-name>")
conn.close()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment