স্কেলিং লোগস্ট্যাশ (রেডিস / ইলাস্টিক সন্ধান সহ)


16

12 সেন্টোস 5.8 এর বেশি সার্ভারের একটি ক্লাস্টারের উপরে, আমি নেটিভ লগস্ট্যাশ শিপার ব্যবহার করে লগস্ট্যাশ স্থাপন করেছি, যা /var/log/*/*.logকেন্দ্রীয় লগস্ট্যাশ সার্ভারে ফিরে পাঠায় ।

আমরা শিপ্পর হিসাবে আরএসস্লগড ব্যবহার করার চেষ্টা করেছি, কিন্তু আরএসস্লগডের ইমফিল মডিউলে একটি বাগের কারণে, যদি দূরবর্তী প্রান্তটি উত্তর না দেয় তবে লগগুলি মেমরির মধ্যে স্তূপিত হয়ে যায়।

আমরা বর্তমানে রেডিসকে পরিবহন প্রক্রিয়া হিসাবে ব্যবহার করছি, সুতরাং লগস্ট্যাশ ০১ এর স্থানীয়ভাবে চলছে, এই লগগুলির জন্য ভিএলএএন-এর আইপিতে আবদ্ধ।

সুতরাং লগস্ট্যাশ-শিপার লগস্ট্যাশ 01 এ redis এ প্রেরণ করে। লগস্ট্যাশ01 একটি পৃথক প্রক্রিয়াতে চলমান ইলাস্টিকসার্ককে প্রেরণ করে।

আমরা যা দেখছি তা এখানে। ইলাস্টিকসারচে 141 টি অবরুদ্ধ থ্রেড রয়েছে। স্থিতিস্থাপক পিতামাতাকে আকর্ষণ করে দেখায়:

futex(0x7f4ccd1939d0, FUTEX_WAIT, 26374, NULL

স্থিতিস্থাপক অনুসন্ধান থেকে এখানে

লগস্ট্যাশ থেকে আসা jstack এখানে

সুতরাং .. গত রাতে, কিছু ওয়েবসার (যারা লগস্ট্যাশ দ্বারা লগগুলি লেজযুক্ত) বাদামে গেছে, যার গড় লোড গড় ৫০০ এরও বেশি।

লগস্ট্যাশ 01 এ, এটি আছে

Dec 19 00:44:45 logstash01 kernel: [736965.925863] Killed process 23429 (redis-server) total-vm:5493112kB, anon-rss:4248840kB, file-rss:108kB

তাই হলে OOM kills-হত্যাকারী redis-সার্ভার, যা বোঝানো লগ সার্ভার যা কাপড় শিপিং হয়েছে .. যার উপর মেমরি স্তূপীকৃত নিহত একরকম মানে যে Apache একটি সুতা তার অবজ্ঞা প্রকাশ করতে ব্যবহৃত পায়। (সত্যি বলতে কীভাবে আমি নিশ্চিত নই, আমি কেবল ধরে নিচ্ছি যে এটি লগটি লেগেছে) ..

ঘটনাগুলি কীভাবে উদ্ঘাটিত হয়েছিল এটি এটি আমার তত্ত্ব:

  1. আমাদের ট্র্যাফিক ছিল
  2. প্রচুর পরিমাণে লগ তৈরি হয়েছিল।
  3. এগুলি রেডিসে পাইলড হয়েছে, কারণ লগস্ট্যাশ / ইলাস্টিক সন্ধান কেবল 300-400 টি নতুন ইভেন্ট / সেকেন্ড সামলাতে সক্ষম বলে মনে হচ্ছে।
  4. রেডিস পুরোপুরি ভরে গিয়েছিল যেখানে ওওএম-হত্যাকারী নির্বোধভাবে হত্যা করেছিল।
  5. রেডিস নতুন আইটেম গ্রহণ করা বন্ধ করে দেয়।
  6. আইটেমগুলি এখন রিমোট হোস্টগুলির পাশে পাইল করা শুরু করে।
  7. সব কিছু বাদাম হয়ে যায় । অ্যাপাচি অনুরোধগুলি গ্রহণ করা বন্ধ করে দেয়। (কেন?)।

প্রশ্নগুলি হ'ল:

  1. যদি লগকে কিছু ঠিকঠাক করে দেয় তবে অ্যাপাচি কেন বাদাম হয়ে যায়। এটাকে লেজ করা জিনিসটি আপাচে লেখা থেকে বাধা দেয়?

  2. দ্রুত / আরও ভাল / স্থিতিস্থাপক স্থিতিস্থাপক তৈরি করার কোন উপায় আছে কি?

  3. রেডিসকে নমনীয় করে তোলার একটি বুদ্ধিমান উপায় কি ওমড হওয়ার কারণে মারা যায় না

  4. আমি যেভাবে এটি সমস্ত সেট আপ করেছি তাতে কি কোনও মৌলিক ত্রুটি রয়েছে, বা প্রত্যেকেরই এই সমস্যা আছে?

- সম্পাদনা -

@ লিসিসের জন্য কয়েকটি চশমা।

admin@log01:/etc/init$ free -m
             total       used       free     shared    buffers     cached
Mem:          7986       6041       1944          0        743       1157
-/+ buffers/cache:       4140       3845
Swap:         3813       3628        185

Filesystem             Size  Used Avail Use% Mounted on
/dev/sda2               19G  5.3G   13G  31% /
udev                   3.9G  4.0K  3.9G   1% /dev
tmpfs                  1.6G  240K  1.6G   1% /run
none                   5.0M     0  5.0M   0% /run/lock
none                   3.9G     0  3.9G   0% /run/shm
/dev/sda1               90M   72M   14M  85% /boot
/dev/mapper/data-disk  471G  1.2G  469G   1% /data

/dev/sda2 on / type ext3 (rw,errors=remount-ro)
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
none on /sys/fs/fuse/connections type fusectl (rw)
none on /sys/kernel/debug type debugfs (rw)
none on /sys/kernel/security type securityfs (rw)
udev on /dev type devtmpfs (rw,mode=0755)
devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=0620)
tmpfs on /run type tmpfs (rw,noexec,nosuid,size=10%,mode=0755)
none on /run/lock type tmpfs (rw,noexec,nosuid,nodev,size=5242880)
none on /run/shm type tmpfs (rw,nosuid,nodev)
/dev/sda1 on /boot type ext2 (rw)
/dev/mapper/data-disk on /data type ext3 (rw)
/data/elasticsearch on /var/lib/elasticsearch type none (rw,bind)

log01:/etc/init$ top 
top - 14:12:20 up 18 days, 21:59,  2 users,  load average: 0.20, 0.35, 0.40
Tasks: 103 total,   1 running, 102 sleeping,   0 stopped,   0 zombie
Cpu0  :  3.0%us,  1.0%sy,  0.0%ni, 95.7%id,  0.0%wa,  0.0%hi,  0.3%si,  0.0%st
Cpu1  : 12.0%us,  1.0%sy,  0.0%ni, 86.6%id,  0.0%wa,  0.0%hi,  0.3%si,  0.0%st
Cpu2  :  4.7%us,  0.3%sy,  0.0%ni, 94.9%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu3  :  5.6%us,  1.3%sy,  0.0%ni, 93.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu4  :  5.3%us,  1.3%sy,  0.0%ni, 93.3%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu5  :  6.4%us,  1.0%sy,  0.0%ni, 92.3%id,  0.0%wa,  0.0%hi,  0.3%si,  0.0%st
Mem:   8178120k total,  6159036k used,  2019084k free,   761780k buffers

1
ইএস এবং এই দুর্দান্ত শীতল সেটআপগুলির সাথে আমার সমস্যা হয়েছে। আমি এখন পাইথনে আমার নিজস্ব সিসলগ রিসিভার লিখছি। লেনদেনের একমাত্র উপায় ছিল এগিয়ে যাওয়া এবং ইএস নোড যুক্ত করা, লগস্ট্যাশের আকার বাড়ানো ... দুঃস্বপ্ন। আমি বিশ্বাস করি অ্যাপাচি লগ ফাইল রাইটিংয়ে ব্লক করে দেয় যাতে এটি কোনও সমস্যা হতে পারে যদি এটি লগ ফাইলটিতে না লিখতে পারে।
অভিষেক দুজারি

পুনরায়: আরএসস্লগ ইস্যু, বিএসব্লকেটেরও বিস্তৃত ছিল আরএসস্লগ সমস্যার কারণে। তারা এটি সম্পর্কে এবং কীভাবে তারা এর চারপাশে কাজ করেছিল তা ব্লগ করেছিল।
জেমস ও গর্মন

উত্তর:


22

আপনার পোস্টটি চশমার পথে খুব বেশি বর্ণনা দেয় না (এলএস সূচকগুলিতে মেমরি, লগ ভলিউম বা আরও অনেক কিছু) তবে আমি চেষ্টা করব এবং আপনার প্রশ্নের উত্তরটি আমি প্রথমে দিতে পারব best দাবি অস্বীকার: আমি লগস্ট্যাশ দেবগুলির মধ্যে একটি -

  1. অ্যাপাচি বাদাম সম্ভবত লগস্ট্যাশ প্রক্রিয়াটির অভিনয় করার একটি পার্শ্ব প্রতিক্রিয়া ছিল। আমি আপাতত এটি একপাশে রেখে দিতাম

  2. ES f / b / s করার বুদ্ধিমান পদ্ধতিতে আরও ইএস নোড যুক্ত করা হয়। এটি গুরুত্ব সহকারে সহজ। এমনকি তারা নেটওয়ার্ক টপোলজির উপর নির্ভর করে একে অপরকে অটোডিস্কোভার করে। এই শিল্পে 17 বছর পরে আমি ইলাস্টিক অনুসন্ধানের মতো এত সহজে কোনও অনুভূমিক স্কেল কখনই দেখিনি।

  3. এফ / বি / এস রেডিসের জন্য, কোনও রেডিস ক্লাস্টারিং ব্যবহার করবেন না। লগস্ট্যাশের নতুন সংস্করণগুলি অভ্যন্তরীণভাবে লোডবালেন্সিংকে রেডিস করতে পারে। রেডিস আউটপুটটি প্লাগিন কনফিগারেশনে রেডিস হোস্টগুলির একটি তালিকা সমর্থন করে এবং সেই সাথে ম্যাচ করার জন্য সমর্থনটি ইনপুট দিকে যুক্ত হতে চলেছে। অন্তর্বর্তী সময়ে আপনি সূচক / গ্রাহক পক্ষের একাধিক রেডিস ইনপুট সংজ্ঞা ব্যবহার করতে পারেন।

  4. আমি এর উত্তরের এই কথাটি বলার অপেক্ষা রাখে না যে এটির মতো মনে হচ্ছে আপনি কোনও একক (সম্ভবত পাতালীন হোস্ট) দিয়ে অনেক কিছু করার চেষ্টা করছেন।

যে কোনও ভাল স্কেলিং প্রক্রিয়া কলোকোকেটেড উপাদানগুলি পৃথক সিস্টেমে ভাঙ্গার মাধ্যমে শুরু হয়। আমি আপনার কনফিগারগুলি কোথাও দেখতে পেলাম না তবে লগস্ট্যাশ 'বাটনেঙ্কস' ফিল্টারগুলিতে রয়েছে। লোগস্ট্যাশ প্রক্রিয়াগুলির মেমরির ব্যবহারের উপরে আপনি কতটি রূপান্তর করতে পারেন তা নির্ভর করে।

লোগস্ট্যাশ লেগোসের মতো অনেক কাজ করে। আপনি হয় 2x4 ইট ব্যবহার করতে পারেন বা একই কাজটি সম্পাদন করতে আপনি দুটি 2x2 ইট ব্যবহার করতে পারেন। লগস্ট্যাশের ক্ষেত্রে ব্যতীত, একটি বড় ইটের চেয়ে ছোট ছোট ইট ব্যবহার করা আসলেই অদ্ভুত।

আমরা সাধারণত কিছু সাধারণ পরামর্শ দিই:

  • প্রান্ত থেকে যত তাড়াতাড়ি সম্ভব শিপ লগগুলি আপনি যদি ডিস্কে লেখার পরিবর্তে খাঁটি নেটওয়ার্ক ট্রান্সপোর্ট ব্যবহার করতে পারেন তবে এটি দুর্দান্ত তবে প্রয়োজনীয় নয়। লোগস্ট্যাশটি জেভিএম ভিত্তিক এবং এর ভাল এবং খারাপ প্রভাব রয়েছে। একটি বিকল্প শিপ ব্যবহার করুন। আমি পাইথন ভিত্তিক একটি লিখেছি ( https://github.com/lusis/logstash-shipper ) তবে আমি পরামর্শ দেব যে লোকেরা এর পরিবর্তে বিভার ব্যবহার করবে ( https://github.com/josegonzalez/beaver )।

  • আপনার লগগুলি এমন বিন্যাসে উত্পন্ন করুন যাতে যতটা সম্ভব ফিল্টারিং সম্ভব হয় (জেসন বা অনুকূলভাবে জসন-ইভেন্ট ফর্ম্যাট) এটি সর্বদা সম্ভব হয় না। এটি করার জন্য আমি একটি লগ 4 জ অ্যাপেন্ডার লিখেছি ( https://github.com/lusis/zmq-appender ) এবং অবশেষে প্যাটার্ন লেআউটটি তার নিজস্ব রেপোতে ছড়িয়ে দিল ( https://github.com/lusis/log4j-jsonevent-layout )। এর অর্থ এই লগগুলির জন্য আমাকে লগস্ট্যাশে কোনও ফিল্টারিং করতে হবে না। আমি কেবল ইনপুটটিতে টাইপটি 'জসন-ইভেন্ট' এ সেট করেছি

অ্যাপাচি জন্য, আপনি এই পদ্ধতির চেষ্টা করতে পারেন: http://cookbook.logstash.net/recips/apache-json-logs/

  • জিনিসগুলিকে একাধিক উপাদানগুলিতে বিভক্ত করে প্রতিটি লগস্ট্যাশ সম্পর্কে যে কথা বলেছিলাম তাতে আমি স্টেরয়েডগুলিতে ইউনিক্স পাইপ হিসাবে বর্ণনা করি। আপনি নিজের পছন্দ মতো দীর্ঘ বা ছোট হিসাবে পাইপলাইনটি তৈরি করতে পারেন। আপনি দায়িত্বগুলি আনুভূমিকভাবে স্থানান্তরিত করে লগস্ট্যাশ স্কেল করেন। এর অর্থ পাইপলাইনটি দীর্ঘতর করা হতে পারে তবে আমরা বিলম্বিত ওভারহেডের ক্ষেত্রে পরিসংখ্যানগতভাবে প্রাসঙ্গিক যে কোনও বিষয়ে কথা বলছি না। আপনার নেটওয়ার্কের উপর যদি আপনার আরও বেশি নিয়ন্ত্রণ থাকে (তবে ইসি 2 তে নয়) আপনি স্ট্যান্ডার্ড ট্র্যাফিক বিচ্ছিন্নতার সাথে কিছু আশ্চর্যজনক কাজ করতে পারেন।

এছাড়াও নোট করুন যে লগস্ট্যাশ মেলিং তালিকাটি খুব সক্রিয় তাই আপনার সর্বদা সেখানে শুরু হওয়া উচিত। আপনার কনফিগারেশন সানিটাইজ এবং সংক্ষিপ্তসার হিসাবে এটি শুরু করার সেরা জায়গা।

পেটবাইট স্তরগুলিতে ইলাস্টিক অনুসন্ধানকে স্কেলিং করে এমন সংস্থা রয়েছে (সোনিয়ানের মতো) এবং সংস্থাগুলি (মেলচিম্প এবং ড্রিমহোস্টের মতো) লগস্ট্যাশকে পাগল স্তরেও স্কেলিং করছে। এটা হতে পারে.


আমি কিউ
টম ও'কনোর

আমি বলব যে লগের ভলিউম এবং আপনি তাদের কতক্ষণ রাখছেন তার উপর নির্ভর করে 8 জি পথ আন্ডারপাওয়ার। আমি রেডিস এবং লগস্ট্যাশ অন্য সার্ভারে সরানো শুরু করব। আপনি কি লগস্ট্যাশ সহ কোনও স্বতন্ত্র পরিষেবা হিসাবে ইএস প্রসেস চালাচ্ছেন?
লুসিস

1
এটি একটি স্বতন্ত্র পরিষেবা। আমি ক্রিসমাসের আগে একটি সাহসী পদক্ষেপ নিয়েছি, এবং রেডিসকে ডিস্ক আচরণের জন্য বন্ধ করে দিয়েছি এবং পুরো জিনিসটি আরও স্থিতিশীল হয়ে উঠেছে।
টম ও'কনর

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