logstash的安裝及配置

首先聲明logstash的版本是6.x,而非7.x,若7.0則提示:

You are using a deprecated config setting "document_type" set in elasticsearch. Deprecated settings will continue to work, but are scheduled for removal from logstash in the future. Document types are being deprecated in Elasticsearch 6.0, and removed entirely in 7.0.

1、logstash的下載

官網 http://www.elastic.co/cn/products/logstash

ELK 都是 Elastic 公司的產品,所有產品的下載地址: https://www.elastic.co/cn/downloads/,直接下載安裝包可以到 https://www.elastic.co/cn/downloads/logstash,老版本在 https://www.elastic.co/cn/downloads/past-releases#logstash

releasenote:https://www.elastic.co/guide/en/logstash/6.8/releasenotes.html

es的下載  http://www.elastic.co/downloads/elasticsearch 下載,老版本的歸檔在 https://www.elastic.co/downloads/past-releases 頁面選擇下載。

2、下載後直接解壓 logstash,進入到logstash bin目錄
cd logstash-6.4.0/bin

現在使用新版本的Logstash 已經不需要單獨安裝logstash-input-jdbc 插件,logstash-6.1.1 以後已經默認支持 logstash-input-jdbc 插件,不需要再單獨安裝了。

所以可以執行 ./logstash -e

但是如果有提示錯誤 ERROR: Pipelines YAML file is empty.   config/pipelines.yml,需要先配置下pipelines.yml,如下:

這樣配置文件爲在指定目錄下的後綴爲conf的文件

如果是老版本需要安裝jdbc的入插件和elasticsearch的出插件:logstash-input-jdbc、logstash-output-elasticsearch
3:安裝logstash-jdbc和logstash-output-elasticsearch
(1)./logstash-plugin install logstash-input-jdbc

(2)./logstash-plugin install  logstash-output-elasticsearch


4:編寫配置文件(jdbc.sql和jdbc.conf,建議在bin目錄下vim jdbc.conf)
(1):首先在bin目錄下新建一個mysql目錄,裏面包含jdbc.conf,jdbc.sql文件,也可以只有jdbc.conf文件,具體看裏面配置就懂了,然後加入mysql的驅動
jdbc.conf內容:

input {
    stdin {
    }
    jdbc {
      # 連接的數據庫地址和哪一個數據庫,指定編碼格式,禁用SSL協議,設定自動重連
      jdbc_connection_string => "jdbc:mysql://數據庫地址:端口號/數據庫名?characterEncoding=UTF-8&useSSL=false&autoReconnect=true"
      # 你的賬戶密碼
      jdbc_user => "賬號"
      jdbc_password => "密碼"
      # 連接數據庫的驅動包,建議使用絕對地址
      jdbc_driver_library => "mysql/mysql-connector-java-5.1.45-bin.jar"
      # 這是不用動就好
      jdbc_driver_class => "com.mysql.jdbc.Driver"
      jdbc_paging_enabled => "true"
      jdbc_page_size => "50000"
       #處理中文亂碼問題
      codec => plain { charset => "UTF-8"}
       #使用其它字段追蹤,而不是用時間
      use_column_value => true
       #追蹤的字段      
    tracking_column => id      
    record_last_run => true     
    #上一個sql_last_value值的存放文件路徑, 必須要在文件中指定字段的初始值     
    last_run_metadata_path => "mysql/station_parameter.txt"
    jdbc_default_timezone => "Asia/Shanghai" 

     #此處也可以直接寫sql,而不寫到文件中,key變爲statement
    statement_filepath => "mysql/jdbc.sql"     

    #是否清除 last_run_metadata_path 的記錄,如果爲真那麼每次都相當於從頭開始查詢所有的數據庫記錄
    clean_run => false

      # 這是控制定時的,重複執行導入任務的時間間隔,第一位是分鐘
      schedule => "* * * * *"
      type => "jdbc"
    }
}
filter {
    json {
        source => "message"
        remove_field => ["message"]
    }
}  
output {
    elasticsearch {
        # 要導入到的Elasticsearch所在的主機
        hosts => "192.168.10.210:9200"
        # 要導入到的Elasticsearch的索引的名稱
        index => "db_case"
        # 類型名稱(類似數據庫表名)
        document_type => "table_caseitem"
        # 主鍵名稱(類似數據庫主鍵)
        document_id => "%{id}"        
    }
    stdout {
        # JSON格式輸出
        codec => json_lines
    }    
}

jdbc.sql裏面就直接寫sql語句就行了,
如果全量同步sql語句就不要寫testid了;增量同步就加上where條件 where testid > :sql_last_value

5、開始導入(需要用root賬戶啓動)
./logstash -f mysql/jdbc.conf

6、多配置文件

我們知道在啓動logstash的時候,只要加上-f /you_path_to_config_file就可以加載配置文件了,但是如果需要多個配置文件,應該怎麼寫呢?

只需要-f /you_path_to_config_directory就可以了。簡單說,就是在-f後面加上目錄就可以。 
注意:目錄後面不能加 * 號

7、input、filter和output

logstash多個配置文件裏的input、filter、output是否相互獨立呢?答案是否定的。

怎麼辦呢?

建議使用tags或者type這兩個特殊字段,即在讀取文件的時候,添加標識符在tags中或者定義type變量。
input{
    file{
        path=>[
            "/home/husen/log/sys.log"
        ]
        type => "from_sys"
        #tags => ["from_sys"]
    }
}
input{
    file{
        path=>[
            "/home/husen/log/error.log"
        ]
        type => "from_error"
        #tags => ["from_sys"]
    }
}

if [type] == "from_sys"{
#if "from_sys" in [tags]
    elasticsearch {
        action => "index"          
        hosts  => "localhost:9200" 
        index  => "from_sys_log"
        codec => "json"
    }
}

if [type] == "from_error"{
#if "from_error" in [tags]
    elasticsearch {
        action => "index"          
        hosts  => "localhost:9200" 
        index  => "from_error_log"
        codec => "json"
    }
}

//特別地,如果要針對不同的類型日誌用不同filter來grok解析,
//也可以通過類似的方法判斷

若有的字段需要轉變成date類型的字段,只需在filter中加上以下部分:

filter {
    date {
         match => [ "created_at", "yyyy-MM-dd HH:mm:ss" ]
        }
}

這樣便可講created_at字段 格式爲yyyy-MM-dd HH:mm:ss的變爲date類型,詳情見 https://www.elastic.co/guide/en/logstash/current/plugins-filters-date.html#plugins-filters-date-match

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章