نصب Elasticsearch ، Logstash ، Kibana (ELK) به عنوان سرویس ویندوزی

نصب Elasticsearch ، Logstash ، Kibana (ELK) به عنوان سرویس ویندوزی
نصب Elasticsearch ، Logstash ، Kibana (ELK) به عنوان سرویس ویندوزی


1 - نصب Elasticsearch به عنوان سرویس ویندوزی

ابتدا دانلود و نصب JDK

سپس متغیر JAVA_HOME رو در Environment Variables حتما به صورت System Variable تعریف کرده و مقدار آن را مسیر نصب java تنظیم کنید. مثلا :

C:\Program Files\Java\jdk-16.0.1

دانلود Elasticsearch

بعد دانلود در مسیری دلخواه از حالت فشرده درآورده ، وارد پوشه config شده و به انتهای فایل elasticsearch.yml این تنظیمات را اضافه کنید

node.name: master
node.master: true
network.host: 0.0.0.0 # دسترسی از بیرون 
cluster.initial_master_nodes: [&quotmaster&quot]
xpack.license.self_generated.type: basic

البته برای تمیزی فایل تنظیمات ، می توان موارد را یافته ، از حالت comment درآورده و تغییر دهید.

حال وارد پوشه bin شده و cmd.exe را در همین مسیر اجرا و دستور زیر را اجرا کنید

.\elasticsearch-service.bat install “<service name>”

سپس دستور زیر را اجرا کنید

.\elasticsearch-service.bat manager “<service name>”

داخل پنجره‌ی باز شده، وارد تب Java بشید و مطمئن شوید که java.io.tmpdir دارای مقدار هست

در صورتی که این مقدار به طور کلی وجود نداشت یا خالی بود، با مسیر دلخواه ایجادش کنید

-Djava.io.tmpdir=C:\elasticTemp


حال می توانید سرویس ویندوزی Elasticsearch را از Services.msc مشاهده ، Service Type آن را از Manual به Automatic تنظیم و سپس Run کنید.

بعد چند لحظه که Elasticsearch بالا آمد ، روی آدرس http://localhost:9200/ صفحه زیر قابل مشاهده هست


2 – نصب Kibana به عنوان سرویس ویندوزی

دانلود Kibana

در مسیری دلخواه از حالت فشرده درآورده ، وارد پوشه config شده و برای اینکه از بیرون ماشین یا سرور هم بتوانیم به kibana دسترسی داشته باشیم ، تنظیم زیر را به انتهای فایل kibana.yml اضافه کنید

server.host: &quot0.0.0.0&quot

اگر Elasticsearch را در سرور دیگری نصب کرده اید ، عبارت elasticsearch.hosts را با آدرس سرور Elasticsearch مقداردهی کنید

برای نصب Kibana به عنوان سرویس، لازمه از ابراز NSSM استفاده کنیم

بعد از دانلود و اکسترکت NSSM، وارد پوشه‌ای که داخل آن فایل nssm.exe وجود داره بشوید و به روش گفته شده در بالا، PowerShell یا Command Prompt رو اجرا کنید؛ بعد، این دستور رو وارد کنید

.\nssm install kibana

مقدار Path را با مسیر فایل kibana.bat ، از پوشه ی kibanaیی که قبلا اکسترکت کرده اید پر کنید.

سپس وارد سربرگ Dependencies شده و نام سرویس ویندوزی Elastic search یی که قبلا ساخته اید را بنویسید


اگر نام سرویس ویندوزی Elasticsearch را فراموش کرده اید ، روی سرویس مزبور کلیک راست کرده ، در Properties ، مقدار Service name را ببینید

با این کار تا زمانی که Elastic search بالا نیامده، Kibana اجرا نشود و اگر Elastic search متوقف شد، Kibana هم متوقف شود.

سپس وارد سربرگ I/O شده و آدرس فایل‌های Log را به مسیری دلخواه مقداردهی کنید

در آخرین گام ، دکمه Install service را کلیک کنید

اکنون در services.msc می توانید سرویس مورد نظر را ببینید.

بعد از اجرای سرویس ویندوزی kibana و گذشت زمانی کوتاه [که بستگی به سیستم دارد] ، روی آدرس http://localhost:5601 ، kibana قابل مشاهده است

3 – نصب LogStash به عنوان سرویس ویندوزی

می خواهیم لاگ هایی که سمت Mongodb درج می شوند را توسط Logstash به Elasticsearch بفرستیم تا index شوند.

دانلود Logstash

دانلود درایور جاوایی Mongodb از صفحه ی زیر

https://dbschema.com/jdbc-driver/MongoDb.html

تنظیمات در فایل config

فایلی با نامی دلخواه مانند logstash.conf ایجاد کرده و با تنظیمات زیر مقداردهی می کنیم :

input {
     jdbc {
     jdbc_driver_library => &quotF:/.../MongoDbJdbcDriver/mongojdbc3.1.jar&quot
     jdbc_driver_class => &quotcom.dbschema.MongoJdbcDriver&quot
     jdbc_connection_string => &quotjdbc:mongodb://<IP>/<MongoDBName>&quot
     jdbc_validate_connection => true
     jdbc_user => &quot&quot
     record_last_run => true
     last_run_metadata_path => &quotF:/.../path/.stored_sql_last_value_file&quot
     schedule => &quot*/10 * * * * *&quot
     clean_run => false
     use_column_value => true
     tracking_column => &quotTStamp&quot
     tracking_column_type => &quotnumeric&quot
     sql_log_level => &quotdebug&quot
     statement => &quot
          var lastValue = :sql_last_value
          db.TestTbl2.aggregate([
          {
               $project :
               {
                    '_id': false,
                    'Title': true,
                    'CreateDate': true,
                    'TStamp': {
                         $subtract: [ '$CreateDate', new Date('1970-01-01') ]
                    }
               }
          },
          {
               $match: {
                    'TStamp': {$gt: lastValue}
               }
               },
               { $limit: 1 },
               { $sort:{ 'TStamp': 1 } }
          ]); &quot
     }
     }
     output {
          elasticsearch {
               hosts => [&quotlocalhost:9200&quot]
               index => &quothbindextest&quot
               doc_as_upsert => true
               document_id => &quot%{[document][TStamp]}&quot
     }
     stdout { codec => rubydebug }
}

jdbc_driver_library : مسیر درایور JDBC مربوط به MongoDB

jdbc_connection_string : رشته اتصال به MongoDB

last_run_metadata_path : مسیر فایلی که حاوی آخرین مقدار tracking_column ایندکس شده

use_column_value : آیا tracking_column استفاده شود؟

tracking_column :

ستون سمت MongoDB که می خوایم با مقدار آن متوجه شویم تا کجا ایندکس شده.

ما برای آزمایش ، در کد واکشی ، ستون TStamp که سمت MongoDB وجود نداشت را ساختیم و از آن برای ردگیری استفاده کردیم.

اگر ستون مورد نظر از قبل در MongoDB وجود داشته باشد ، تغییرات زیر را باید انجام داد تا Logstash بتواند آن ستون را یافته و از مقدار آن استفاده کند

به مسیر زیر بروید

F:\...\logstash-7.13.3\vendor\bundle\jruby\2.5.0\gems\logstash-integration-jdbc-5.0.7\lib\logstash\plugin_mixins\jdbc\jdbc.rb : line 236

تابع get_column_value(row) را تغییر دهید

public
def get_column_value(row)
if !row.has_key?(@tracking_column.to_sym)
     if !row.dig(:document, @tracking_column).nil?
     @sql_last_value = row.dig(:document, @tracking_column)
     elsif !@tracking_column_warning_sent
     @logger.warn(&quottracking_column not found in dataset.&quot, :tracking_column => @tracking_column)
     @tracking_column_warning_sent = true
end
# If we can't find the tracking column, return the current value in the ivar
@sql_last_value
else
# Otherwise send the updated tracking column
row[@tracking_column.to_sym]
end
end

با این تغییر ستون مورد نطر را در زیر مجموعه document می یابد

tracking_column_type : نوع tracking_column (یا numeric یا timestamp)

از مسیر زیر قابل مشاهده است

F:\...\logstash-7.13.3\vendor\bundle\jruby\2.5.0\gems\logstash-integration-jdbc-5.0.7\lib\logstash\inputs\jdbc.rb : line 174

حال می توان به دو شیوه Logstash را اجرا کرد :

  • اجرا از طریق cmd
  • نصب به صورت سرویس ویندوزی توسط NSSM و اجرا


اجرای Logstash از طریق cmd

1 - ابتدا Cmd را در این مسیر اجرا

2 - و دستور زیر را وارد کنید

F:\...\logstash-7.13.3\bin\logstash -fF:\...\config\logstash.conf


نصب Logstash به عنوان سرویس ویندوزی

1 – اجرای cmd به عنوان Administrator

2 – اجرای دستور زیر

F:\...\nssm-2.24\win64\nssm.exe install <logstash service name> &quotF:\...\logstash-7.13.3\bin\logstash.bat&quot &quot-f F:\...\config\logstash.conf&quot

برای شروع

F:\...\nssm-2.24\win64\nssm.exe start <logstash service name>

برای خاتمه

F:\...\nssm-2.24\win64\nssm.exe stop <logstash service name>

برای ویرایش

F:\...\nssm-2.24\win64\nssm.exe edit <logstash service name>

برای حذف

F:\...\nssm-2.24\win64\nssm.exe remove <logstash service name>