参考

环境说明

数据库版本 Microsoft SQL Server 2019(15.0.4236.7)
elasticsearch版本 elasticsearch:8.4.1
logstash版本 elasticsearch:8.4.1
jdbc驱动程序版本 mssql-jdbc-8.4.1.jre8.jar

jdbc驱动程序版本反复测试换了N个版本后才能连接上.

建库建表

  1. SELECT CAST(SERVERPROPERTY('ProductVersion') AS varchar) as ProductVersion

下载 JDBC 驱动

Logstash 需要使用 JDBC 驱动从 SQL Server 数据库中读取数据,因此我们还需要安装 JDBC 驱动。同样不要去获取最新版本的驱动程序,请选择 Microsoft JDBC Driver 4.2 for SQL Server
Microsoft JDBC Driver for SQL Server 发行说明
https://github.com/microsoft/mssql-jdbc/tags
我选择了mssql-jdbc-8.4.1.jre8.jar版本才能正常使用logstash.

配置logstash

将下载的jdbc驱动程序解压后,选择mssql-jdbc-8.4.1.jre8.jar放到logstash的/usr/share/logstash/pipeline目录下
1665028684765.png
传文件进docker指定路径

  1. docker cp F:/project/elasticsearch/mssql-jdbc-8.4.1.jre8.jar logstash:/usr/share/logstash/pipeline/

sqlserver-es-boutitem.conf

在logstash的config目录(/usr/share/logstash/config)下配置sqlserver-es-boutitem.conf文件,logstash会根据配置的地址从sql server中读取数据向ES中写入索引。

  1. #进入容器
  2. docker exec -it logstash /bin/bash
  3. #进入config文件夹
  4. cd /usr/share/logstash/config
  5. vi sqlserver-es-boutitem.conf
  1. input {
  2. jdbc {
  3. # integratedSecurity=true;trustServerCertificate=false;encrypt=false;
  4. jdbc_connection_string => "jdbc:sqlserver://192.168.3.40:1433;DatabaseName=es_test;"
  5. # the user we wish to excute our statement as
  6. jdbc_user => "sa"
  7. jdbc_password => "longfuchu"
  8. # the path to our downloaded jdbc driver
  9. jdbc_driver_library => "/usr/share/logstash/pipeline/mssql-jdbc-8.4.1.jre8.jar"
  10. # the name of the driver class for mysql
  11. jdbc_driver_class => "com.microsoft.sqlserver.jdbc.SQLServerDriver"
  12. jdbc_paging_enabled => "true"
  13. jdbc_page_size => "10000"
  14. jdbc_default_timezone =>"Asia/Shanghai"
  15. #record_last_run => "true"
  16. # 跟踪列的类型。目前只有“numeric”和“timestamp
  17. #tracking_column_type => "timestamp"
  18. # 设置为true时,将tracking_column的值用作:sql_last_value。设置为false时,:sql_last_value反映上次执行查询的时间
  19. use_column_value => true
  20. # 跟踪列名
  21. tracking_column => "id"
  22. # 设置列名小写
  23. # lowercase_column_names => false
  24. #statement => "SELECT Id,`Name` as CName,Content,Added FROM `cap.published` as cap_published"
  25. statement => "select id,deptno,deptname,bloodno,bloodname,boutcount,bloodunitname,bodate from V_Blood_BOutItem as mssql_blood_boutitem WHERE id > :sql_last_value "
  26. #定时配置 -- 每过一分钟会采集一次数据
  27. schedule => "* * * * *"
  28. #从0分钟开始,每5分钟执行一次
  29. #schedule => "0 0/5 * * * ? "
  30. }
  31. }
  32. output {
  33. elasticsearch {
  34. #ESip地址和端口
  35. #hosts => ["localhost:9200","localhost:9202","localhost:9203"]
  36. hosts => "192.168.3.40:9200"
  37. manage_template => false
  38. user => "longfc"
  39. password => "lfc123456"
  40. #ES索引库名称
  41. index => "mssql_blood_boutitem"
  42. document_id => "%{id}"
  43. }
  44. stdout {
  45. #日志输出
  46. codec => json_lines
  47. }
  48. }

注意事项:

  • 数据库es_test及表v_blood_boutitem提前创建好;
  • elasticsearch的user需要提前在kibana创建好,并配置好相应的角色及权限;
  • 索引可以不用预先创建,由ES自动创建(需要执行语句里预先设置好符合ES索引的表别名称),好像还是要自己先创建好索引才能同步数据成功;
  • 索引名称只能是小写;
  • integratedSecurity=true;集成域认证

    logstash.yml

    ```ruby

    进入容器

    docker exec -it logstash /bin/bash

进入config文件夹

cd /usr/share/logstash/config

vi logstash.yml

  1. ```ruby
  2. http.host: "0.0.0.0"
  3. # xpack.monitoring.elasticsearch.hosts: [ "http://192.168.3.40:9200" ]
  4. # xpack.monitoring.elasticsearch.username: "elastic"
  5. # xpack.monitoring.elasticsearch.password: "F3SXEhBp3Jysfd9OyhJX"
  6. xpack.monitoring.enabled: false

pipelines.yml

  1. #进入容器
  2. docker exec -it logstash /bin/bash
  3. #进入config文件夹
  4. cd /usr/share/logstash/config
  5. #更改pipelines.yml文件
  6. vi pipelines.yml
  1. # This file is where you define your pipelines. You can define multiple.
  2. # For more information on multiple pipelines, see the documentation:
  3. # https://www.elastic.co/guide/en/logstash/current/multiple-pipelines.html
  4. - pipeline.id: main
  5. path.config: "/usr/share/logstash/pipeline"
  6. # path.config: "/usr/share/logstash/config/mysql-es-xc.conf"
  7. path.config: "/usr/share/logstash/config/sqlserver-es-boutitem.conf"

重启容器

  1. #退出容器
  2. exit
  3. #重启容器
  4. docker restart logstash

测试结果

登录kibana

http://localhost:5601/login
1664941831641.png
使用elastic账号登录,如果忘记或不清楚elastic的账号密码,请先重置elastic密码后再使用.
elastic
F3SXEhBp3Jysfd9OyhJX
输入账号elastic及密码,登录成功后显示内容如下
1664974563924.png

测试图表示例

(注意,图表的数据为随机导入的未真正处理好的测试数据,仅供测试展示)
1665063224134.png
1665063339379.png
(注意,图表的数据为随机导入的未真正处理好的测试数据,仅供测试展示)