mirror of
https://github.com/balena-os/balena-supervisor.git
synced 2025-02-22 10:21:01 +00:00
Merge pull request #2209 from balena-os/logs-optimization
Logs optimizations
This commit is contained in:
commit
9f79b4b157
@ -12,7 +12,7 @@ import {
|
|||||||
LogBackend,
|
LogBackend,
|
||||||
LogMessage,
|
LogMessage,
|
||||||
} from './logging';
|
} from './logging';
|
||||||
import logMonitor from './logging/monitor';
|
import logMonitor, { MonitorHook } from './logging/monitor';
|
||||||
|
|
||||||
import * as globalEventBus from './event-bus';
|
import * as globalEventBus from './event-bus';
|
||||||
import superConsole from './lib/supervisor-console';
|
import superConsole from './lib/supervisor-console';
|
||||||
@ -109,9 +109,7 @@ export function enable(value: boolean = true) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function log(message: LogMessage) {
|
export function log(message: LogMessage) {
|
||||||
if (backend != null) {
|
backend?.log(message);
|
||||||
backend.log(message);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export function logSystemMessage(
|
export function logSystemMessage(
|
||||||
@ -139,9 +137,10 @@ export function lock(containerId: string): Bluebird.Disposer<() => void> {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type ServiceInfo = { serviceId: number; imageId: number };
|
||||||
export function attach(
|
export function attach(
|
||||||
containerId: string,
|
containerId: string,
|
||||||
serviceInfo: { serviceId: number; imageId: number },
|
{ serviceId, imageId }: ServiceInfo,
|
||||||
): Bluebird<void> {
|
): Bluebird<void> {
|
||||||
// First detect if we already have an attached log stream
|
// First detect if we already have an attached log stream
|
||||||
// for this container
|
// for this container
|
||||||
@ -150,9 +149,14 @@ export function attach(
|
|||||||
}
|
}
|
||||||
|
|
||||||
return Bluebird.using(lock(containerId), async () => {
|
return Bluebird.using(lock(containerId), async () => {
|
||||||
logMonitor.attach(containerId, (message) => {
|
await logMonitor.attach(
|
||||||
log({ ...serviceInfo, ...message });
|
containerId,
|
||||||
});
|
(message: Parameters<MonitorHook>[0] & Partial<ServiceInfo>) => {
|
||||||
|
message.serviceId = serviceId;
|
||||||
|
message.imageId = imageId;
|
||||||
|
log(message);
|
||||||
|
},
|
||||||
|
);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,10 +5,7 @@ import * as db from '../db';
|
|||||||
import { spawnJournalctl, toJournalDate } from '../lib/journald';
|
import { spawnJournalctl, toJournalDate } from '../lib/journald';
|
||||||
import log from '../lib/supervisor-console';
|
import log from '../lib/supervisor-console';
|
||||||
|
|
||||||
export type MonitorHook = ({
|
export type MonitorHook = (message: {
|
||||||
message,
|
|
||||||
isStdErr,
|
|
||||||
}: {
|
|
||||||
message: string;
|
message: string;
|
||||||
isStdErr: boolean;
|
isStdErr: boolean;
|
||||||
timestamp: number;
|
timestamp: number;
|
||||||
@ -70,13 +67,13 @@ class LogMonitor {
|
|||||||
format: 'json',
|
format: 'json',
|
||||||
filterString: '_SYSTEMD_UNIT=balena.service',
|
filterString: '_SYSTEMD_UNIT=balena.service',
|
||||||
},
|
},
|
||||||
(row: JournalRow) => {
|
(row) => {
|
||||||
if (row.CONTAINER_ID_FULL && this.containers[row.CONTAINER_ID_FULL]) {
|
if (row.CONTAINER_ID_FULL && this.containers[row.CONTAINER_ID_FULL]) {
|
||||||
this.setupAttempts = 0;
|
this.setupAttempts = 0;
|
||||||
this.handleRow(row);
|
this.handleRow(row);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
(data: Buffer) => {
|
(data) => {
|
||||||
log.error('journalctl - balena.service stderr: ', data.toString());
|
log.error('journalctl - balena.service stderr: ', data.toString());
|
||||||
},
|
},
|
||||||
() => {
|
() => {
|
||||||
@ -154,8 +151,8 @@ class LogMonitor {
|
|||||||
filterString: `CONTAINER_ID_FULL=${containerId}`,
|
filterString: `CONTAINER_ID_FULL=${containerId}`,
|
||||||
since: toJournalDate(lastSentTimestamp + 1), // increment to exclude last sent log
|
since: toJournalDate(lastSentTimestamp + 1), // increment to exclude last sent log
|
||||||
},
|
},
|
||||||
(row: JournalRow) => this.handleRow(row),
|
(row) => this.handleRow(row),
|
||||||
async (data: Buffer) => {
|
(data) => {
|
||||||
log.error(
|
log.error(
|
||||||
`journalctl - container ${containerId} stderr: `,
|
`journalctl - container ${containerId} stderr: `,
|
||||||
data.toString(),
|
data.toString(),
|
||||||
@ -169,19 +166,24 @@ class LogMonitor {
|
|||||||
|
|
||||||
private handleRow(row: JournalRow) {
|
private handleRow(row: JournalRow) {
|
||||||
if (
|
if (
|
||||||
row.CONTAINER_ID_FULL &&
|
row.CONTAINER_ID_FULL == null ||
|
||||||
row.CONTAINER_NAME !== 'balena_supervisor' &&
|
row.CONTAINER_NAME === 'balena_supervisor' ||
|
||||||
row.CONTAINER_NAME !== 'resin_supervisor'
|
row.CONTAINER_NAME === 'resin_supervisor'
|
||||||
) {
|
) {
|
||||||
const containerId = row.CONTAINER_ID_FULL;
|
return;
|
||||||
const message = messageFieldToString(row.MESSAGE);
|
|
||||||
const isStdErr = row.PRIORITY === '3';
|
|
||||||
const timestamp = Math.floor(Number(row.__REALTIME_TIMESTAMP) / 1000); // microseconds to milliseconds
|
|
||||||
if (message != null && this.containers[containerId]) {
|
|
||||||
this.updateContainerSentTimestamp(containerId, timestamp);
|
|
||||||
this.containers[containerId].hook({ message, isStdErr, timestamp });
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
const containerId = row.CONTAINER_ID_FULL;
|
||||||
|
if (this.containers[containerId] == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const message = messageFieldToString(row.MESSAGE);
|
||||||
|
if (message == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const isStdErr = row.PRIORITY === '3';
|
||||||
|
const timestamp = Math.floor(Number(row.__REALTIME_TIMESTAMP) / 1000); // microseconds to milliseconds
|
||||||
|
this.updateContainerSentTimestamp(containerId, timestamp);
|
||||||
|
this.containers[containerId].hook({ message, isStdErr, timestamp });
|
||||||
}
|
}
|
||||||
|
|
||||||
private updateContainerSentTimestamp(
|
private updateContainerSentTimestamp(
|
||||||
|
Loading…
x
Reference in New Issue
Block a user