想学我教你啊,快速搭建自己的 ELK 日志系统!

  ELK作为一个开源的日志中心解决方案,是时候自己去玩一玩了。

  虽然公司有一套自己开发的日志中心,用起来也很顺手,但是毕竟不是自己开发,也没有参与部署。其中许多细节都不为我知,算不得了解吧!于是,决定自己手动来搭建一个日志中心玩玩!

问题主要两个:

  1. 用什么环境来搭建?linux?windows?

  2. 用什么样实现来搭建?主机?虚拟机?等等!

然后,决定了,在阿里云上用一个2核4G的机器,使用 docker 进行搭建!

 在决定使用docker后,问题变得简单了起来!

  1. docker 怎样用? 基于 centos 系统级别的镜像来搭建应用?

  2. ES/LOGSTASH/KIBANA 这些工具在哪里可以找到?

  3. 所有ELK服务都部署一个docker或者部署各一个docker?

 刚开始,想完整体验下,整个 ELK 的安装过程,于是,决定使用一个干净的 centos 镜像一个个安装!

  按照官网教程进行安装 ES:

复制代码
    rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
        
    # Create a file called elasticsearch.repo in the /etc/yum.repos.d/ directory for RedHat based distributions, or in the /etc/zypp/repos.d/ directory for OpenSuSE based distributions, containing:

    [elasticsearch-6.x]
    name=Elasticsearch repository for 6.x packages
    baseurl=https://artifacts.elastic.co/packages/6.x/yum
    gpgcheck=1
    gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
    enabled=1
    autorefresh=1
    type=rpm-md
    
    sudo yum install elasticsearch
    
    # 添加到服务
    chkconfig --add elasticsearch
    # 启动 es
    service elasticsearch start
复制代码

 

  # 报错 error: "Read-only file system" setting key "vm.max_map_count"

sysctl -w vm.max_map_count=262144    # 退出docker操作

 

  ES使用 127.0.0.1 可以启动,但是使用 0.0.0.0 的 network.host 不行!

 

换方案,使用官方的 ELK 镜像直接安装! ( elk image 地址: https://hub.docker.com/r/sebp/elk )

官网教程地址: https://elk-docker.readthedocs.io/

docker pull sebp/elk

  先进行启动试试!

# 加上 --rm 如果成功,则再去除该选项正式操作
docker run --rm -p 5601:5601 -p 9200:9200 -p 5044:5044 -it -h elk_official --name elk_official_container sebp/elk

  但是,看到 Elasticsearch 重试 30 次后,失败了!

  最后,确定了是因为 docker 有问题,重启后问题解决!

service docker restart

 

  安装 filebeat, 进行客户端日志收集!

    # filebeat 安装,下载,安装,运行
    wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.6.0-x86_64.rpm
    rpm -ivh filebeat-6.6.0-x86_64.rpm
    # 更改 filebeat 配置,指向 logstash
    vim /etc/filebeat/filebeat.yml
    /etc/init.d/filebeat restart

 

  filebeat.yml 关键配置如下:

复制代码
- type: log

  # Change to true to enable this input configuration.
  # enabled: false
  enabled: true

  # Paths that should be crawled and fetched. Glob based paths.
  paths:
    - /var/log/*.log
  ### Multiline options

  # Multiline can be used for log messages spanning multiple lines. This is common
  # for Java Stack Traces or C-Line Continuation

  # The regexp Pattern that has to be matched. The example pattern matches all lines starting with [
  #multiline.pattern: ^\[
  multiline.pattern: ^[0-9]+
  multiline.negate: true
  multiline.match: after


#============================= Filebeat modules ===============================

filebeat.config.modules:
  # Glob pattern for configuration loading
  path: ${path.config}/modules.d/*.yml

  # Set to true to enable config reloading
  reload.enabled: false


#==================== Elasticsearch template setting ==========================

setup.template.settings:
  index.number_of_shards: 3
  #index.codec: best_compression
  #_source.enabled: false

#----------------------------- Logstash output --------------------------------
output.logstash:
  # The Logstash hosts
  hosts: ["172.19.234.163:5044"]

  # Optional SSL. By default is off.
  # List of root certificates for HTTPS server verifications
  #ssl.certificate_authorities: ["/etc/pki/root/ca.pem"]

  # Certificate for SSL client authentication
  #ssl.certificate: "/etc/pki/client/cert.pem"

  # Client Certificate Key
  #ssl.key: "/etc/pki/client/cert.key"

#================================ Processors =====================================

# Configure processors to enhance or manipulate events generated by the beat.

processors:
  - add_host_metadata: ~
  - add_cloud_metadata: ~
复制代码

  主要为:

    1. 开启日志监听;

    2. 发送 logstash 服务;

    3. 开启 multiline 解析,解析 java stacktrace 等等!

 

最后,还差配置 logstash, 因为 filebeat 只负责读文件,文件的内容还没有完全解析,需要使用 logstash 再次解析, logstash 有强大的 filter 功能!

复制代码
# vi /etc/logstash/conf.d/02-beats-input.conf, 编辑 logstash 配置

input {
  beats {
    port => 5044
    #ssl => true
    ssl => false
    ssl_certificate => "/etc/pki/tls/certs/logstash-beats.crt"
    ssl_key => "/etc/pki/tls/private/logstash-beats.key"
  }
}

#过滤器,http://grokdebug.herokuapp.com/ 是在线调试logstash filter的工具,你可以在线调试你的过滤规则。
filter {
    if [input][type] == "log" {
        grok {
            match => { "message" => "(?<create_time>\d{2}\-\d{2} \d{2}:\d{2}:\d{2}\.\d+) (?<thread>\[[^\]]*\]) %{WORD:log_level}" }
            #remove_field => ["message"]
        }
    }
}
output {
    stdout {
        codec => rubydebug
    }
    elasticsearch {
        hosts => ["localhost:9200"]
    
        # 索引名称
        index => "api-%{+YYYY.MM.dd}"
    }
}
复制代码

  其中,grok 不好搞,kibana 后台有自带的工作可用! > Dev Tools 里!

      Grok大部分情况下都是遵守正则规则的,应该说它是在正则的惹出上再添加一些自己的功能,如 各种关键词匹配: HTTPDATE, CLIENTIP, WORD ...  ,而对于普遍情况,则自行写正则即可!匹配到的结果将会添加到新的key中,对于完全替换后的词,则可以将其本身删除 remove掉。

 

  这样,整个 ELK 就搭建成功了!

 

  就可以在后台进行日志搜索了!

 

  如果想要进行监控报警这些高级功能,则一般需要进行升级付费了!

 

posted @   阿牛20  阅读(621)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示