ডকার পাত্রে চলাকালীন stdout / stderr এ লগ ইন করতে কীভাবে পিএইচপি-এফএমপি পাবেন


18

আমার একটি ডকার পাত্রে পিএইচপি-এফপিএম আছে এবং Dockerfileআমি এফএমপি কনফিগারেশন ফাইলটি সম্পাদনা করতে (যা /etc/php5/fpm/pool.d/www.conf) যেতে অ্যাক্সেস লগগুলি /var/log/fpm-access.logএবং ত্রুটি লগগুলিতে যেতে যেতে /var/log/fpm-php.www.log:

# Do some php-fpm config
#  Redirect worker stdout and stderr into main error log
#  Activate the fpm access log
#  Enable display errors
#  Enable the error log
RUN sed -i '/^;catch_workers_output/ccatch_workers_output = yes' /etc/php5/fpm/pool.d/www.conf && \
    sed -i '/^;access.log/caccess.log = /var/log/fpm-access.log' /etc/php5/fpm/pool.d/www.conf && \
    sed -i '/^;php_flag\[display_errors\]/cphp_flag[display_errors] = off' /etc/php5/fpm/pool.d/www.conf && \
    sed -i '/^;php_admin_value\[error_log\]/cphp_admin_value[error_log] = /var/log/fpm-php.www.log' /etc/php5/fpm/pool.d/www.conf && \
    sed -i '/^;php_admin_flag\[log_errors\]/cphp_admin_flag[log_errors] = on' /etc/php5/fpm/pool.d/www.conf

এটি দুর্দান্ত কাজ করে - লগগুলি দেখতে আমি পাত্রে একটি শেল পেতে পারি। তবে ... এটি সেরা অনুশীলন নয়।

সমস্যাটি যখন আমি ডকার লগ সংগ্রাহককে ব্যবহার করার চেষ্টা করি - stdout বা stderr এ লগ করার জন্য আমার php-fpm প্রয়োজন যাতে ডকার তাদের ক্যাপচার করে docker logsকমান্ডটি সরবরাহ করতে পারে ।

আমি এটিতে চেষ্টা করেছি Dockerfile(যা আমি অফিশিয়াল এনজিনেক্স ডকার ইমেজ থেকে অনুলিপি করা একটি ধারণা ):

# Redirect fpm logs to stdout and stderr so they are forwarded to the docker log collector
RUN ln -sf /dev/stdout /var/log/fpm-access.log && \
    ln -sf /dev/stderr /var/log/fpm-php.www.log

এটি কাজ করছে না - কোনও অ্যাক্সেস লগ পাওয়া যায়নি docker logs- কেন আমি তা বোঝার চেষ্টা করছি? ডকারে এফএমপি ব্যবহার করে এমন অন্য কেউ ডকার লগ সংগ্রাহককে লগিংয়ের কাজ করতে পরিচালিত করেছেন?

উত্তর:


24

ঠিক আছে, এটি করার উপায়টি হল নীচের ঠিকানায় ত্রুটি এবং অ্যাক্সেস লগগুলি প্রেরণ করা:

/proc/self/fd/2

ইন php5-fpm.logঅ্যাড:

access.log = /proc/self/fd/2
error_log = /proc/self/fd/2

এটা তোলে সেখানে হতে জন্য সম্ভব /dev/stdin ~ /dev/fd/0 ~ /proc/self/fd/0, এবং /dev/stdoutএবং /dev/stderrরূপগুলো। ব্যবহার করা মনে রাখা সহজ হতে পারে /dev/stdin
সিএমসিডিগ্রাগনকাই

1
উত্তরে একটি ত্রুটি রয়েছে - এটি "অ্যাক্সেস_লগ" "অ্যাক্সেস.লগ" নয়
আরফাই

2
দেখা যাচ্ছে এটি হ'ল access.log: github.com/docker-library/php/blob/…
কমান্ডজেড

13

নোট করুন যে অফিসিয়াল পিএইচপি এফএমপি ডকার ইমেজের সর্বশেষ সংস্করণের জন্য বেকড এফএমপি কনফিগারেশন স্ট্যান্ডার্ড স্ট্রিমগুলিতে লিখেছেন:

error_log = /proc/self/fd/2

...

; if we send this to /proc/self/fd/1, it never appears
access.log = /proc/self/fd/2

ধন্যবাদ, এটি আকর্ষণীয়। আমি জানতাম না যে এখন কোনও অফিসিয়াল চিত্র আছে
টম

1
আপনি কোন ডকার ইমেজের উল্লেখ করছেন? আমি পিএইচপি: 7-এফপিএম দৌড়েছি এবং এটিতে লগিং ত্রুটি বলে মনে হচ্ছে না stderr
ডেরেক

1

পিএইচপি-FPM লগ শুধুমাত্র stderr উপস্থিত হবে - যাতে আপনি সিমবলিক লিঙ্ক করতে fpm.logকরতে /dev/stderrযদি তুমি চাও।

ln -sf /dev/stderr /var/log/fpm-access.log
ln -sf /dev/stderr /var/log/fpm-error.log

4
এই সমাধানটি প্রশ্নে দেওয়া হয়েছিল এবং জিজ্ঞাসাবাদী জানিয়েছে এটি কাজ করে না। সম্ভবত আপনি নির্দিষ্ট করে দিতে পারেন যে কীভাবে এটি সঠিকভাবে কাজ করতে বা তার পাত্রে সঞ্চালন করতে পারে এমন অন্যান্য ডায়াগনস্টিকসটিকে তার ডকফায়লে এটিকে লোড করতে পারে?
অ্যান্ড্রু ডোমাসেক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.