质量监控平台数据传递:
logstash-->redis-->logstash-->elasticsearch-->kibana
logstash数据采集搭建
docker pull docker.elastic.co/logstash/logstash:7.9.0
docker run -d -p 5044:5044 --name logstash docker.elastic.co/logstash/logstash:7.9.0
1.获取配置文件
# 获取配置文件
mkdir -p /data/elk/logstash/ && chmod 777 /data/elk/logstash/
docker cp logstash:/usr/share/logstash/config /data/elk/logstash/
docker cp logstash:/usr/share/logstash/pipeline /data/elk/logstash/
2.删除容器
# 删除容器
docker rm -f logstash
3.修改config目录下的logstash.yml和piplines.yml两个配置文件
3.1 修改logstash.yml
# 修改 /data/elk/logstash/config/logstash.yml
# 此处的hosts为本地es的运行环境 但并不是localhost:9200
# 因为docker容器会以为这是docker中的本机IP
# 而要使用ifconfig命令去查找 本机映射在docker中的局域网IP
http.host: "0.0.0.0"
xpack.monitoring.elasticsearch.hosts: [ "http://服务器ip:9200" ]
xpack.monitoring.enabled: true
3.2 修改pipelines.yml
# 修改管道文件配置 /data/elk/logstash/config/pipelines.yml
- pipeline.id: mail
path.config: "/usr/share/logstash/pipeline/jdbc.conf"
4. pipeline目录中增加jdbc.conf
vim jdbc.conf,写一下内容:
#详细插件信息查看elastic官网input-plugins\filter-plugins\output-plugins
#input 插件指定数据的输入源,一个pipeline可以有多个input插件
# 当前文件的所有172.27.12.66都应该替换为ES或mysql所在的IP
input {
jdbc {
#使用用户root连接到Telegram数据库
jdbc_connection_string =>"jdbc:mysql://1.14.99.123:3306/failed_tasks?characterEncoding=UTF-8&useSSL=false&autoReconnect=true"
#数据库用户名
jdbc_user => "root"
#数据库密码
jdbc_password => "123456"
#在当前路径中放置适当的JDBC驱动程序库,一定要是容器内的路径,不是宿主机上存放jar包的路径,但是jar包是存放在宿主机挂载的路径中的。
jdbc_driver_library => "/usr/share/logstash/pipeline/mysql-connector-java-8.0.28.jar"
# mysql的驱动类的名称
jdbc_driver_class => "com.mysql.jdbc.Driver"
#启用分页,默认false
jdbc_paging_enabled => "true"
#页面大小,默认100000
jdbc_page_size => "50000"
#是否记录上次运行的结果
record_last_run => true
#记录上次运行结果的文件位置,一定要是容器内的路径,但是指向的是存放在宿主机挂载的路径中的。
last_run_metadata_path => "/usr/share/logstash/pipeline/lastvalue.txt"
#是否使用数据库某一列的值,
use_column_value => true
tracking_column => "id"
#numeric或者timestamp
tracking_column_type => "numeric"
#如果为true则会清除last_run_metadata_path记录,即重新开始同步数据
clean_run => false
# sql语句文件,对于复杂的查询,可以放在文件中,如:
# statement_filepath => "jdbc.sql"这个文件路径要跟jdbc.sql对应上
statement => "select * FROM eyes_db_copy1"
#设置监听间隔。可以设置每隔多久监听一次什么的。
#官方举例:
#* 5 * 1-3 * 一月到三月的每天凌晨5点每分钟执行一次。
#0 * * * * 将在每天每小时的第0分钟执行。
#0 6 * * * America/Chicago每天早上6:00(UTC / GMT -5)执行。
#* * * * * 分、时、天、月、年,全部为*默认含义为每分钟查询一次
schedule => "* * * * *"
#索引类型
type => "failed_tasks"
}
}
#filter插件是logstash的主要功能之一,可以对logstash event进行丰富的处理。如类型转换、删除字段等。
filter {
#json 按照json解析字段内容到指定字段中
json {
#source 要解析的字段名
source => "message"
#解析后的存储字段
remove_field => ["message"]
}
}
#output负责将数据输出到指定的位置
output {
#输出到ES中,基于HTTP实现
elasticsearch {
#用户节点地址,这里对应我们的ES的IP地址和端口
hosts => ["http://1.14.99.123:9200"]
#索引名称
index => "failed_tasks"
#自增ID 需要关联的数据库中有有一个id字段,对应索引的id号
document_id => "%{id}"
}
#stdout输出到标准输出,一般用于调试
stdout {
codec => json_lines
}
}
5.以文件挂载的方式启动容器:
docker run -d -p 5044:5044 \
-v /data/elk/logstash/config:/usr/share/logstash/config \
-v /data/elk/logstash/pipeline:/usr/share/logstash/pipeline \
--name logstash \
docker.elastic.co/logstash/logstash:7.9.0
执行命令后,会用当前目录下的logstash.yml文件和logstash.conf文件替换容器内部的logstash.yml和logstash.conf文件。
启动logstash大概需要1分钟时间
效果:
以上为logstash 同步mysql数据到es的步骤。
logstash.conf:
input {
file {
path=>["/data/run_time*.json"]
}
}
filter {
json{
source=>"message"
}
}
output {
elasticsearch {
hosts=>["xx.xx.xx.xx:9200"]
index=>"chuntian2-%{+YYYY.MM}"
}
stdout {}
}
logstash.yml为空。
将日志文件中的数据通过logstash grok插件匹配推送到es中:
logstash grok过滤:
Grok filter plugin | Logstash Reference [8.1] | Elastic
debug调试:
elasticsearch搭建
docker pull docker.elastic.co/elasticsearch/elasticsearch:7.9.0 docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:7.9.0
es语法:https://www.elastic.co/guide/en/elasticsearh/reference/7.8/getting-started-index.html
通过9200端口访问es
1.PUT:向elasticsearch中插入文档
curl -X PUT "$es_host:9200/customer/_doc/1?pretty" -H 'Content-Type:application/json' -d '{"name":"chuntian"}'
customer:索引名 为customer
_doc: 文档名
1: id 为1的文档数据
响应
2.GET:从elasticsearch文档中检索获取数据
curl -X GET "$es_host:9200/customer/_doc/3?pretty"
响应:
3.搜索数据
官方文档中语法:
GET /bank/_search
{
"query": { "match_all": {} },
"sort": [
{ "account_number": "asc" }
]
}
_search:表示搜索
match_all:匹配所有文档
match:精准匹配
curl -X GET "$es_host:9200/customer/_search?pretty"
kibana搭建
docker pull docker.elastic.co/kibana/kibana:7.9.0
docker run -d --name kibana --link elasticsearch:elasticsearch -p 5601:5601 docker.elastic.co/kibana/kibana:7.9.0
前端访问:
1.discover:数据过滤检索
2. dashboard:仪表
3.visualize:可视化展示的图表类型
4.stack management:
往es中推送数据:
for i in {9..100};do curl -X PUT "$es_host:9200/customer_bak/_doc/$i?pretty" -H 'Content-Type:application/json' -d '{"name":"chuntian i='$i'","time":"2022-03-22 14:55:36"}';sleep 0.2;done
点击Refresh,新推送的数据就会展示在kibana中。