Logstash не читает журналы, если не для чтения во всем мире
Недавно я установил Logstash с Kibana и Elasticsearch, но у меня возникла проблема, заключающаяся в том, что он не читает журналы, если права доступа к каталогу не являются общими для чтения / выполнения (а файлы, по крайней мере, для мирового чтения).
Я установил версию 1.4.2 из RPM, которая работает от имени пользователя logstash. Я убедился, что пользователь logstash входит в группы, относящиеся к журналам, которые он должен прочитать, например, "apache".
[root@rhel-00081 conf]# id logstash
uid=497(logstash) gid=497(logstash) groups=48(apache),10081(nexus),27666(spark),497(logstash)
Разрешение по умолчанию для /var/log/http: drwxr-x--- root apache
, однако Logstash не будет обрабатывать журналы, пока я не изменю это на drwxr-xr-x
Есть идеи, почему это так?
2 ответа
Хорошо, я обнаружил проблему. Сценарий инициализации, предоставленный в RPM, запускает logstash следующим образом:
nice -n ${LS_NICE} chroot --userspec $LS_USER:$LS_GROUP / sh -c "
cd $LS_HOME
ulimit -n ${LS_OPEN_FILES}
exec \"$program\" $args
" > "${LS_LOG_DIR}/$name.stdout" 2> "${LS_LOG_DIR}/$name.err" &
Но при запуске под командой chroot все членство в вторичной группе удаляется, если вы не укажете опцию --groups. Вы можете увидеть это, если запустите:
[root@rhel-00081 ~]# chroot --userspec logstash:logstash / bash -c "id"
uid=497(logstash) gid=497(logstash) groups=497(logstash),0(root)
Поэтому логи apache не читаются...
[root@rhel00081 httpd]# chroot --userspec logstash:logstash / bash -c "cat /var/log/httpd/access_log"
cat: /var/log/httpd/access_log: Permission denied
Строка chroot в сценарии инициализации должна начинаться с чего-то вроде:
SUPP_GROUPS=$(groups $LS_USER | cut -d " " -f 4- | tr " " ",")
SUPP_GROUP_STR=""
if [ ! -z ${SUPP_GROUPS} ]
then
SUPP_GROUP_STR="--groups=${SUPP_GROUPS}"
fi
и затем измените начало строки chroot:
nice -n ${LS_NICE} chroot ${SUPP_GROUP_STR} --userspec=$LS_USER:$LS_GROUP / sh -c "
... etc ...
Это известная проблема в сценарии инициализации logstash 1.4.2. https://github.com/elastic/logstash/pull/1398