参考
环境说明
数据库版本 | 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 |
建库建表
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目录下
传文件进docker指定路径
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中写入索引。
#进入容器
docker exec -it logstash /bin/bash
#进入config文件夹
cd /usr/share/logstash/config
vi sqlserver-es-boutitem.conf
input {
jdbc {
# integratedSecurity=true;trustServerCertificate=false;encrypt=false;
jdbc_connection_string => "jdbc:sqlserver://192.168.3.40:1433;DatabaseName=es_test;"
# the user we wish to excute our statement as
jdbc_user => "sa"
jdbc_password => "longfuchu"
# the path to our downloaded jdbc driver
jdbc_driver_library => "/usr/share/logstash/pipeline/mssql-jdbc-8.4.1.jre8.jar"
# the name of the driver class for mysql
jdbc_driver_class => "com.microsoft.sqlserver.jdbc.SQLServerDriver"
jdbc_paging_enabled => "true"
jdbc_page_size => "10000"
jdbc_default_timezone =>"Asia/Shanghai"
#record_last_run => "true"
# 跟踪列的类型。目前只有“numeric”和“timestamp”
#tracking_column_type => "timestamp"
# 设置为true时,将tracking_column的值用作:sql_last_value。设置为false时,:sql_last_value反映上次执行查询的时间
use_column_value => true
# 跟踪列名
tracking_column => "id"
# 设置列名小写
# lowercase_column_names => false
#statement => "SELECT Id,`Name` as CName,Content,Added FROM `cap.published` as cap_published"
statement => "select id,deptno,deptname,bloodno,bloodname,boutcount,bloodunitname,bodate from V_Blood_BOutItem as mssql_blood_boutitem WHERE id > :sql_last_value "
#定时配置 -- 每过一分钟会采集一次数据
schedule => "* * * * *"
#从0分钟开始,每5分钟执行一次
#schedule => "0 0/5 * * * ? "
}
}
output {
elasticsearch {
#ES的ip地址和端口
#hosts => ["localhost:9200","localhost:9202","localhost:9203"]
hosts => "192.168.3.40:9200"
manage_template => false
user => "longfc"
password => "lfc123456"
#ES索引库名称
index => "mssql_blood_boutitem"
document_id => "%{id}"
}
stdout {
#日志输出
codec => json_lines
}
}
注意事项:
- 数据库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
```ruby
http.host: "0.0.0.0"
# xpack.monitoring.elasticsearch.hosts: [ "http://192.168.3.40:9200" ]
# xpack.monitoring.elasticsearch.username: "elastic"
# xpack.monitoring.elasticsearch.password: "F3SXEhBp3Jysfd9OyhJX"
xpack.monitoring.enabled: false
pipelines.yml
#进入容器
docker exec -it logstash /bin/bash
#进入config文件夹
cd /usr/share/logstash/config
#更改pipelines.yml文件
vi pipelines.yml
# This file is where you define your pipelines. You can define multiple.
# For more information on multiple pipelines, see the documentation:
# https://www.elastic.co/guide/en/logstash/current/multiple-pipelines.html
- pipeline.id: main
path.config: "/usr/share/logstash/pipeline"
# path.config: "/usr/share/logstash/config/mysql-es-xc.conf"
path.config: "/usr/share/logstash/config/sqlserver-es-boutitem.conf"
重启容器
#退出容器
exit
#重启容器
docker restart logstash
测试结果
登录kibana
http://localhost:5601/login
使用elastic账号登录,如果忘记或不清楚elastic的账号密码,请先重置elastic密码后再使用.
elastic
F3SXEhBp3Jysfd9OyhJX
输入账号elastic及密码,登录成功后显示内容如下
测试图表示例
(注意,图表的数据为随机导入的未真正处理好的测试数据,仅供测试展示)
(注意,图表的数据为随机导入的未真正处理好的测试数据,仅供测试展示)