ELK质量监控平台搭建

质量监控平台数据传递:

 

        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调试:

Grok Debugger

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中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chuntian_tester

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值