как запустить cwlogs внутри docker с переменной - PullRequest
0 голосов
/ 22 января 2020

Я написал базовый файл docker, куда я скопировал ниже файл шаблона cloudWatchLogger.tmp.sh для использования в потомке.

#!/bin/sh

SDC_HOSTNAME="$1"

echo "Running AWSLOG Agent for ${SDC_HOSTNAME}"

SDC_GROUPNAME="${SDC_AWS_GROUPNAME}"
SDC_LOGSTREAM_NAME="${SDC_GROUPNAME}_${SDC_HOSTNAME}"


cat > awslogs.conf <<EOF
[general]
state_file = /var/awslogs/state/agent-state

[${SDC_AWS_GROUPNAME}_SDC]
datetime_format = %d/%b/%Y:%H:%M:%S %z
file = /apps/logs/sdc.log
buffer_duration = 5000
log_stream_name = ${SDC_LOGSTREAM_NAME}
initial_position = start_of_file
log_group_name = api/my-logs
EOF

echo "Inside AWSLOG AGENT Script and hostname is ${SDC_HOSTNAME}"
aws configure set plugins.cwlogs cwlogs
aws configure set default.region "eu-west-1"
aws logs push --config-file awslogs.conf 

теперь в моем дочернем docker файле,

ARG SDC_AWS_GROUPNAME="docker-poc"
ENV SDC_AWS_GROUPNAME="${SDC_AWS_GROUPNAME}"

# REPLACE
RUN envsubst < /var/awslogs/cloudWatchLogger.tmp.sh > /var/awslogs/cloudWatchLogger.sh && \
    chmod 755 /var/awslogs/cloudWatchLogger.sh

ENTRYPOINT ["/docker-entrypoint.sh"]
CMD ["dc", "-exec"]

и внутри точки входа я запускаю /var/awslogs/cloudWatchLogger.sh, что нормально. (фрагменты точки входа, как показано ниже):

echo "${FINAL_FORMAT} Pipeline is up and running."
echo "${FINAL_FORMAT} Started running AWSLOGS for ${HOSTNAME}"
/var/awslogs/cloudWatchLogger.sh "${HOSTNAME}" &

теперь, как только я запускаю контейнер, я вижу имя хоста для моей точки входа, но я не вижу, чтобы HOSTNAME распространялось через cloudWatchLogger.sh:

2020-01-22 15:49:58 [INFO] [pipeLine] Pipeline is up and running.
2020-01-22 15:49:58 [INFO] [pipeLine] Started running AWSLOGS for **`b53b3a2e992f`**
Running AWSLOG Agent for **<no hostname>**
Inside AWSLOG AGENT Script and hostname is **<no hostname>**

2020-01-22 15:50:16,916 - cwlogs.push.watcher - ERROR - 109 - Thread-1 - Failed to refresh stream: {'file': 'api/my-logs', 'source_id': None, 'log_group_name': 'anl-cwl-dev-dlk-api/sdc-logs', **'log_stream_name': ''**, 'datetime_format': '%d/%b/%Y:%H:%M:%S %z', 'time_zone': 'LOCAL', 'buffer_duration': 5000, 'init_pos': 'start_of_file', 'encoding': 'utf_8', 'queue': 0}, **reason: ValueError('The log_stream_name can not be blank',).**
  • Как я могу убедиться, что имя хоста также передается в cloudWatchLogger.sh?
  • Как я могу это исправить, чтобы имя хоста также было частью cloudWatchLogger скрипт?
...