zoukankan      html  css  js  c++  java
  • elk

    关系型 -------- 非关系型
    MySQL ?--? NoSQL
    Database ----> Index
    Table ----> Type
    Row ----> Document
    Column ----> Filed

    ELK组成:
    - E:是指Elasticsearch,完成数据的存储和检索
    - L:是Logstash,完成数据的采集、过滤及解析
    - K:Kibana,以WEB方式展示

    curl 命令

    访问一个网页
    curl http://www.baidu.com

    显示头信息
    curl -I http://www.baidu.com

    显示详细的交互信息
    curl -v http://www.baidu.com

    把网页内存保存为文件
    curl -o urfile http://www.baidu.com

    禁用 防火墙,禁用 selinux

    elasticsearch 安装
    1、安装 openjdk 包
    yum install -y java-1.8.0-openjdk-devel

    验证
    java -version
    jps

    安装 elasticsearch
    rpm -ivh elasticsearch-2.3.4.rpm

    修改配置文件启动服务
    network.host: ip.xx.xx.xx
    systemctl start elasticsearch

    验证
    systemctl status elasticsearch
    netstat -ltunp

    通过浏览器访问
    http://192.168.4.11:9200/

    elasticsearch 集群安装
    在多台机器上安装部署 java-1.8.0-openjdk-devel,elasticsearch-2.3.4.rpm
    修改 hosts 文件,保证所有机器通过名称能 ping 通集群中的其他机器

    禁用防火墙 和 selinux
    禁用防火墙 和 selinux
    禁用防火墙 和 selinux

    在所有节点修改配置文件 /etc/elasticsearch/elasticsearch.yml
    cluster.name: my-elk01
    node.name: node5
    network.host: 0.0.0.0
    discovery.zen.ping.unicast.hosts: ["node1", "node2", "node3", "node5"]

    启动所有节点的 elasticsearch 服务
    通过浏览器可以访问任意节点的 http://ip.xx.xx.xx:9200/

    验证集群是否正常,访问
    http://192.168.4.15:9200/_cluster/health?pretty

    {
    "cluster_name" : "my-elk01", #集群名称
    "status" : "green", # 表示正常
    "timed_out" : false,
    "number_of_nodes" : 5, #当前节点数量
    "number_of_data_nodes" : 5,
    "active_primary_shards" : 0,
    "active_shards" : 0,
    "relocating_shards" : 0,
    "initializing_shards" : 0,
    "unassigned_shards" : 0,
    "delayed_unassigned_shards" : 0,
    "number_of_pending_tasks" : 0,
    "number_of_in_flight_fetch" : 0,
    "task_max_waiting_in_queue_millis" : 0,
    "active_shards_percent_as_number" : 100.0
    }

    插件的安装 head kopf bigdesk
    1 拷贝插件 zip 包到一个目录
    2 /usr/share/elasticsearch/bin/plugin install file:///插件的位置/插件包.zip 安装

    3 验证:
    安装完成以后可以通过
    /usr/share/elasticsearch/bin/plugin list 看到我们已经安装的插件的名称

    4 访问head 插件
    它展现ES集群的拓扑结构
    可以通过它来进行索引(Index)和节点(Node)级别的操作
    它提供一组针对集群的查询API,并将结果以json和表格形式返回
    它提供一些快捷菜单,用以展现集群的各种状态
    http://192.168.4.11:9200/_plugin/head/


    5 kopf 插件安装
    kopf是一个ElasticSearch的管理工具,它提供了对ES集群操作的API。
    /usr/share/elasticsearch/bin/plugin install file:///xxx-kopf.zip

    访问地址
    http://192.168.4.11:9200/_plugin/kopf/

    6 bigdesk 插件安装
    bigdesk是elasticsearch的一个集群监控工具
    可以通过它来查看es集群的各种状态,
    如:cpu、内存使用情况,索引数据、搜索情况,http连接数等。
    /usr/share/elasticsearch/bin/plugin install file:///bigdesk-xxx.zip

    访问地址
    http://192.168.4.11:9200/_plugin/bigdesk/

    使用RESTful API操作elasticsearch
    curl -XPUT 'http://192.168.4.11:9200/school/' -d '{
    "settings":{
    "index":{
    "number_of_shards": 5,
    "number_of_replicas": 1
    }
    }
    }'

    获取索引配置信息:
    curl -XGET 'http://192.168.4.11:9200/school/_settings/'
    curl -XGET 'http://192.168.4.11:9200/_all/_settings/'

    创建文档
    curl -XPUT 'http://192.168.4.11:9200/school/students/1' -d '{
    "title": "devops",
    "name":{
    "first": "guzhang",
    "last": "wu"
    },
    "age": 25
    }'

    查询文档信息
    curl -XGET 'http://192.168.4.11:9200/school/students/1'
    curl -XGET 'http://192.168.4.11:9200/school/students/1?_source=name,age'

    更新文档信息
    curl -XPOST 'http://192.168.4.11:9200/school/students/1/_update' -d '{
    "doc":{
    "age": 30
    }
    }'

    删除文档信息
    curl -XDELETE 'http://192.168.4.14:9200/school/students/1'

    批量导入数据
    curl -XPOST 'http://192.168.4.14:9200/_bulk' --data-binary @shakespeare.json
    curl -XPOST 'http://192.168.4.14:9200/_bulk' --data-binary @logs.jsonl
    curl -XPOST 'http://192.168.4.14:9200/accounts/act/_bulk?pretty' --data-binary @accounts.json

    批量查询数据
    curl -XGET 'http://192.168.4.11:9200/_mget?pretty' -d '{
    "docs":[
    {
    "_index": "accounts",
    "_type:": "act",
    "_id": 1
    },
    {
    "_index": "accounts",
    "_type:": "act",
    "_id": 2
    },
    {
    "_index": "shakespeare",
    "_type:": "scene",
    "_id": 1
    }
    ]
    }'

    json 是什么,格式怎么书写

    1 昨天已经搭建好 elasticsearch 集群
    清除所有 index
    导入 logs.jsonl 日志

    mapping:
    映射:创建索引的时候,可以预先定义字段的类型及相关属性。
    作用:这样会让索引建立得更加的细致和完善。
    分类:静态映射和动态映射。
    动态映射:自动根据数据进行相应的映射。
    静态映射:自定义字段映射数据类型。

    kibana部分

    1.kibana的概念及特点。
    概念:数据可视化平台工具
    特点:
    - 灵活的分析和可视化平台
    - 实时总结和流数据的图表
    - 为不同的用户显示直观的界面
    - 即时分享和嵌入的仪表板

    2.kibana的安装配置。
    rpm -ivh kibana-4.5.2-1.x86_64.rpm

    #配置 kibana
    /opt/kibana/config/kibana.yml
    server.port: 5601
    server.host: "0.0.0.0"
    elasticsearch.url: "http://192.168.4.13:9200"
    kibana.index: ".kibana"
    kibana.defaultAppId: "discover"
    elasticsearch.pingTimeout: 1500
    elasticsearch.requestTimeout: 30000
    elasticsearch.startupTimeout: 5000

    通过图形页面展示,注意时间是 2015 年,需要调整时间才能正常显示

    logstash部分

    3.logstash的概念及特点。
    概念:logstash是一个数据采集、加工处理以及传输(输出)的工具。
    特点:
    - 所有类型的数据集中处理
    - 不同模式和格式数据的正常化
    - 自定义日志格式的迅速扩展
    - 为自定义数据源轻松添加插件

    安装Logstash
    rpm -ivh logstash-2.3.4-1.noarch.rpm
    Logstash 依赖 java 环境,需要安装 java-1.8.0-openjdk

    安装之后,创建第一个测试的配置文件
    /etc/Logstash/logstash.conf
    input{ stdin{} }
    filter{ }
    output{ stdout{} }

    使用 logstash -f logstash.conf 启动,如果输入数据能看到返回证明 logstash 安装正确

    logstash 数据处理结构
    | -------------------------logstash---------------------------|
    {数据源} -->{ input{数据接收} -- filter{数据处理} -- output{数据发送} } --> {ES集群}
    |--------------------------logstash---------------------------|


    布尔值类型: ssl_enable => true
    字节类型: bytes => "1MiB"
    字符串类型: name => "xkops"
    数值类型: port => 22
    数组: match => ["datetime","UNIX"]
    哈希: options => {key1 => "value1",key2 => "value2"}
    编码解码: codec => "json"
    路径: file_path => "/tmp/filename"
    注释: #

    条件判断:
    等于: ==
    不等于: !=
    小于: <
    大于: >
    小于等于: <=
    大于等于: >=
    匹配正则: =~
    不匹配正则: !~
    包含: in
    不包含: not in
    与: and
    或: or
    非与: nand
    非或: xor
    复合表达式: ()
    取反符合: !()

    logstash-file 插件: 从文件读取,在屏幕输出
    file插件字段解释:
    codec => #可选项,默认是plain,可设置其他编码方式。
    discover_interval => #可选项,logstash多久检查一下path下有新文件,默认15s。
    exclude => #可选项,排除path下不想监听的文件。
    sincedb_path => #可选项,记录文件以及文件读取信息位置的数据文件。~/.sincedb_xxxx
    sincedb_write_interval => #可选项,logstash多久写一次sincedb文件,默认15s.
    stat_interval => #可选项,logstash多久检查一次被监听文件的变化,默认1s。
    start_position => #可选项,logstash从哪个位置读取文件数据,默认从尾部,值为:end。初次导入,设置为:beginning。
    path => #必选项,配置文件路径,可定义多个。
    tags => #可选项,在数据处理过程中,由具体的插件来添加或者删除的标记。
    type => #可选项,自定义处理时间类型。比如nginxlog。

    input{
    file{
    start_position => "beginning"
    sincedb_path => "/var/lib/logstash/sincedb-access"
    path => ["/tmp/blog","/tmp/alog"]
    type => 'filelog'
    }
    }

    filter{ }
    output{ stdout{} }

    logstash-tcp 插件:从网络读取,在屏幕输出
    tcp插件字段解释:
    add_field => #可选项,默认{}。
    codec => #可选项,默认plain。
    data_timeout => #可选项,默认-1。
    host => #可选项,默认0.0.0.0。
    mode => #可选项,值为["server","client"]之一,默认为server。
    port => #必选,端口。
    ssl_cacert => #可选项,定义相关路径。
    ssl_cert => #可选项,定义相关路径。
    ssl_enable => #可选项,默认为false。
    ssl_key => #可选项,定义相关路径。
    ssl_key_passphrase => #可选项,默认nil
    ssl_verify => #可选项,默认false。
    tags => #可选项
    type => #可选项
    input{
    tcp{
    host => "0.0.0.0"
    port => 8888
    type => "tcplog"
    }
    }
    filter{ }
    output{ stdout{} }

    在服务器上启动 logstash , 在客户机上使用 shell 脚本测试
    function tcpmsg() {
    exec 9<>/dev/tcp/192.168.4.10/8888
    echo -ne "${1} " >&9
    exec 9<&-
    }

    logstash-udp插件:
    udp插件字段解释:
    add_field => #可选项,默认{}。
    host => #可选项,默认0.0.0.0。
    queue_size => #默认2000
    tags => #可选项
    type => #可选项
    workers => #默认为2

    input{
    udp{
    host => "192.168.4.10"
    port => 9999
    }
    }
    filter{ }
    output{ stdout{} }

    在服务器上启动 logstash , 在客户机上使用 shell 脚本测试
    function udpmsg() {
    exec 9<>/dev/udp/192.168.4.10/9999
    echo -ne "${1} " >&9
    exec 9<&-
    }

    logstash-syslog 插件:

    input{
    syslog{
    host => "192.168.4.10"
    port => 514
    type => "syslog"
    }
    }
    filter{ }
    output{ stdout{} }

    在服务器启动 logstash,在客户机修改 /etc/rsyslog.conf 配置问件,添加
    *.* @@192.168.4.10:514
    重新启动 rsyslog 服务
    systemctl restart rsyslog
    使用明令写入 syslog 进行测试
    logger -p local0.info -t test_logstash 'test message'
    输入命令以后可以在 /var/log/messages 看到,在 logstash 服务器端也同时能看到输出

    codec类插件
    常用的插件:plain、json、json_lines、rubydebug、multiline等

    input{
    file{
    start_position => "beginning"
    sincedb_path => "/dev/null"
    path => ["/tmp/alog"]
    type => 'filelog'
    codec => "json"
    }
    }
    output{
    stdout{ codec => "rubydebug" }
    }

    利用 rubydebug 方便调试,如果输入在文件是 json 在 input 指定编码格式

    filter grok插件:解析各种非结构化的日志数据插件
    grok有丰富的patterns,查看方式
    /opt/logstash/vendor/bundle/jruby/1.9/gems/logstash-patterns-core-2.0.5/patterns/grok-patterns

    filter{
    grok{
    match => ["message","%{IP:ip} %{WORD:method} %{URIPATH:uri} %{NUMBER:bytes} %{NUMBER:duration}"]
    }
    }

    grok 使用正则表达式把飞结构化的数据结构化在分组匹配,正则表达式需要根据具体数据结构编写,虽然编写困难,但适用性极广,几乎可以应用于各类数据

    最后是一个完整的 Logstash 的配置文件,使用Logstash 收集数据,格式化以后放入 ES 集群
    input{
    file{
    start_position => "beginning"
    sincedb_path => "/dev/null"
    path => ["/tmp/alog"]
    type => 'filelog'
    codec => "json"
    }
    }

    filter{
    }
    output{
    if [type] == "filelog"{
    elasticsearch {
    hosts => ["192.168.4.15:9200"]
    index => "weblog"
    flush_size => 2000
    idle_flush_time => 10
    }}
    }

    放入集群以后的数据可以通过 kibana 展示
    在生产环境中,我们往往还需要配置 redis 用来缓存 或 filebeat 用来收集日志,这里给出简单的配置样例,需要更深入学习的同学请查看官方文档

    https://github.com/logstash-plugins

    redis 配置
    input{
    redis{
    host => 'redis-server'
    port => '6379'
    data_type => 'list'
    key => 'lb'
    codec => 'json'
    }
    }

    filebeat 配置
    input {
    beats {
    port => 5044
    codec => "json"
    }
    }

    filebeat 客户端相关配置文件
    filebeat:
    prospectors:
    -
    paths:
    - /root/logs.jsonl
    document_type: logstash
    -
    paths:
    - /root/shakespeare.json
    document_type: shakespeare
    -
    paths:
    - /root/accounts.json
    document_type: account

    registry_file: /var/lib/filebeat/registry
    output:
    logstash:
    hosts: ["192.168.4.10:5044"]
    shipper:
    logging:
    files:

  • 相关阅读:
    hdu6148 Valley Numer
    NOI2007 生成树计数
    bzoj3336 Uva10572 Black and White
    hdu1693 eat the trees
    【模板】插头dp
    bzoj4712 洪水
    ZJOI2010 基站选址
    poj2376 Cleaning Shifts
    bzoj4367 [IOI2014]holiday假期
    bzoj4951 [Wf2017]Money for Nothing
  • 原文地址:https://www.cnblogs.com/fuzhongfaya/p/8953332.html
Copyright © 2011-2022 走看看