Я написал базовый файл 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
скрипт?