Elastic Stack

开发人员不能登陆线上服务器查看详细日志

各个系统都有日志,日志数据分散难以查找

日志数据量大,查询速度慢,或者数据不够实时

官网地址:https://www.elastic.co/cn/

官网权威指南:https://www.elastic.co/guide/cn/elasticsearch/guide/current/index.html

安装指南:https://www.elastic.co/guide/en/elasticsearch/reference/5.x/rpm.html

ELK是Elasticsearch、Logstash、Kibana的简称,这三者是核心套件,但并非全部。

Elasticsearch是实时全文搜索和分析引擎,提供搜集、分析、存储数据三大功能;是一套开放REST和JAVA API等结构提供高效搜索功能,可扩展的分布式系统。它构建于Apache Lucene搜索引擎库之上。

Logstash是一个用来搜集、分析、过滤日志的工具。它支持几乎任何类型的日志,包括系统日志、错误日志和自定义应用程序日志。它可以从许多来源接收日志,这些来源包括 syslog、消息传递(例如 RabbitMQ)和JMX,它能够以多种方式输出数据,包括电子邮件、websockets和Elasticsearch。

Kibana是一个基于Web的图形界面,用于搜索、分析和可视化存储在 Elasticsearch指标中的日志数据。它利用Elasticsearch的REST接口来检索数据,不仅允许用户创建他们自己的数据的定制仪表板视图,还允许他们以特殊的方式查询和过滤数据

架构图

elasticsearch的安装及常用插件使用

elasticsearch安装

准备环境:

  1. 两台虚拟机:
  2. 内存:4G+
  3. 处理器:双核
  4. 磁盘:40G
  5. 系统要求:
  6. System:CentOS7.3(1611)
  7. nodejs:v6.10.2
  8. Openjdk:1.8.0_131
  9. elasticsearch:elasticsearch5.4
  10. elasticsearch-head:elasticsearch-head:5
  11. ip地址:192.168.1.121
  12. 安装elasticsearch logstash kibana nginx docker redis
  13. ip地址:192.168.1.120
  14. 安装elasticsearch logstash

官网地址:https://www.elastic.co/guide/en/elasticsearch/reference/5.0/rpm.html#rpm-repo

  1. 安装elasticsearchyum源的密钥
  2. # rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
  3. 配置elasticsearchyum
  4. # vim /etc/yum.repos.d/elasticsearch.repo
  5. elasticsearch.repo文件中添加如下内容
  6. [elasticsearch-5.x]
  7. name=Elasticsearch repository for 5.x packages
  8. baseurl=https://artifacts.elastic.co/packages/5.x/yum
  9. gpgcheck=1
  10. gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
  11. enabled=1
  12. autorefresh=1
  13. type=rpm-md

安装elasticsearch的环境

  1. 安装elasticsearch
  2. # yum install -y elasticsearch
  3. 安装java环境
  4. # yum install -y java
  5. 验证java安装成功
  6. [root@localhost ~]# java -version
  7. openjdk version "1.8.0_131"
  8. OpenJDK Runtime Environment (build 1.8.0_131-b11)
  9. OpenJDK 64-Bit Server VM (build 25.131-b11, mixed mode)

创建elasticsearch data的存放目录,并修改该目录的属主属组

  1. # mkdir -p /data/es-data (自定义用于存放data数据的目录)
  2. # chown -R elasticsearch:elasticsearch /data/es-data

修改elasticsearch的日志属主属组

  1. # chown -R elasticsearch:elasticsearch /var/log/elasticsearch/

修改elasticsearch的配置文件

  1. # vim /etc/elasticsearch/elasticsearch.yml
  2. 找到配置文件中的cluster.name,打开该配置并设置集群名称
  3. cluster.name: demon
  4. 找到配置文件中的node.name,打开该配置并设置节点名称
  5. node.name: linux-node1
  6. 修改data存放的路径
  7. path.data: /data/es-data
  8. 修改logs日志的路径
  9. path.logs: /var/log/elasticsearch/
  10. 配置内存使用用交换分区
  11. bootstrap.memory_lock: true
  12. 监听的网络地址
  13. network.host: 0.0.0.0
  14. 开启监听的端口
  15. http.port: 9200
  16. 增加新的参数,这样head插件可以访问es (5.x版本,如果没有可以自己手动加)
  17. http.cors.enabled: true
  18. http.cors.allow-origin: "*"

启动elasticsearch服务

  1. 启动服务
  2. # systemctl start elasticsearch.service
  3. 查看服务状态,如果有报错可以去看错误日志 less /var/log/elasticsearch/demon.log(日志的名称是以集群名称命名的)
  4. # systemctl status elasticsearch.service
  5. 创建开机自启动服务
  6. # systemctl enable elasticsearch.service

通过浏览器请求下9200的端口,看下是否成功

  1. # curl http://192.168.1.121:9200/
  2. {
  3. "name" : "linux-node1",
  4. "cluster_name" : "demon",
  5. "cluster_uuid" : "kM0GMFrsQ8K_cl5Fn7BF-g",
  6. "version" : {
  7. "number" : "5.4.0",
  8. "build_hash" : "780f8c4",
  9. "build_date" : "2017-04-28T17:43:27.229Z",
  10. "build_snapshot" : false,
  11. "lucene_version" : "6.5.0"
  12. },
  13. "tagline" : "You Know, for Search"
  14. }

如何和elasticsearch交互

  1. JavaAPI

  2. RESTful API

    Javascript,.Net,PHP,Perl,Python

    1. 利用API查看状态
    2. # curl -i -XGET 'localhost:9200/_count?pretty'
    3. HTTP/1.1 200 OK
    4. content-type: application/json; charset=UTF-8
    5. content-length: 95
    6. {
    7. "count" : 0,
    8. "_shards" : {
    9. "total" : 0,
    10. "successful" : 0,
    11. "failed" : 0
    12. }
    13. }

安装插件

  1. # /usr/share/elasticsearch/bin/elasticsearch-plugin install mapper-attachments
  2. 注:还有一些监控的优秀插件,但是因为不支持elasticsearch5.4的版本
  3. kopf github地址:
  4. https://github.com/lmenezes/elasticsearch-kopf
  5. bigdesk github地址:
  6. https://github.com/lukas-vlcek/bigdesk

安装elasticsearch-head插件

  1. 安装docker镜像或者通过github下载elasticsearch-head项目都是可以的,1或者2两种方式选择一种安装使用即可
  2. 1. 使用docker的集成好的elasticsearch-head
  3. # docker run -p 9100:9100 mobz/elasticsearch-head:5
  4. docker容器下载成功并启动以后,运行浏览器打开http://localhost:9100/
  5. 2. 使用git安装elasticsearch-head
  6. # yum install -y npm
  7. # git clone git://github.com/mobz/elasticsearch-head.git
  8. # cd elasticsearch-head
  9. # npm install
  10. # npm run start
  11. git下载成功并安装完毕以后,浏览器打开http://localhost:9100/
  12. 3. 安装nodejs
  13. nodejs官网地址:https://nodejs.org/en/download/
  14. 下载node的压缩包
  15. # wget https://nodejs.org/dist/v6.10.3/node-v6.10.3-linux-x64.tar.xz
  16. 因为下载的压缩包是xz格式的,所以还需要安装一下xz
  17. # yum install -y xz
  18. 解压缩
  19. # xz -d node-v6.10.3-linux-x64.tar.xz
  20. 解压缩完毕以后是个tar包,还需要把tar再次解压
  21. # tar -xvf node-v6.10.3-linux-x64.tar
  22. 解压完node的安装文件后,需要配置下环境变量,编辑/etc/profile,添加
  23. # echo "# set node environment" >> /etc/profile
  24. # echo "export NODE_HOME=/usr/elk/node-v6.10.3-linux-x64" >> /etc/profile
  25. # echo "export PATH=$PATH:$NODE_HOME/bin" >> /etc/profile
  26. # source /etc/profile
  27. 看下nodejs的目录及使用版本
  28. # echo $NODE_HOME
  29. # node -v
  30. 重启elasticsearch服务
  31. # systemctl restart elasticsearch.service

要选择自己对应的系统版本和架构

测试下效果

获取id信息



可以通过页面来查看添加的数据,包括可以使用基本查询来过滤数据

来测试下删除的效果吧~

LogStash的使用

安装Logstash环境:

官方安装手册:

https://www.elastic.co/guide/en/logstash/current/installing-logstash.html

  1. 下载yum源的密钥认证:
  2. # rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
  3. 利用yum安装logstash
  4. # yum install -y logstash
  5. 查看下logstash的安装目录
  6. # rpm -ql logstash
  7. 执行logstash的命令
  8. # /usr/share/logstash/bin/logstash -e 'input { stdin { } } output { stdout {} }'
  9. 运行成功以后输入:
  10. hello,world
  11. stdout返回的结果:
  12. 2017-05-23T06:55:03.607Z linux-node1 hello,world
  13. 注:
  14. -e 执行操作
  15. input 标准输入
  16. { input } 插件
  17. output 标准输出
  18. { stdout } 插件

  1. 通过rubydebug来输出下更详细的信息
  2. # /usr/share/logstash/bin/logstash -e 'input { stdin { } } output { stdout {codec => rubydebug} }'
  3. 执行成功输入:
  4. wtf
  5. stdout输出的结果:
  6. {
  7. "@timestamp" => 2017-05-23T07:01:18.961Z,
  8. "@version" => "1",
  9. "host" => "linux-node1",
  10. "message" => "wtf"
  11. }
  12. 注:
  13. codec 编解码器
  14. logstash的结果输出到elasticsearch
  15. # /usr/share/logstash/bin/logstash -e 'input { stdin { } } output { elasticsearch { hosts => ["192.168.1.121:9200"] } }'
  16. 运行成功以后输入:
  17. r8
  18. V12
  19. 123

elasticsearch中的效果:

  1. 如果标准输出还有elasticsearch中都需要保留应该怎么玩,看下面
  2. # /usr/share/logstash/bin/logstash -e 'input { stdin { } } output { elasticsearch { hosts => ["192.168.1.121:9200"] } stdout { codec => rubydebug }}'
  3. 运行成功以后输入:
  4. demon
  5. 返回的结果(标准输出中的结果):
  6. {
  7. "@timestamp" => 2017-05-23T07:35:16.492Z,
  8. "@version" => "1",
  9. "host" => "linux-node1",
  10. "message" => "demon"
  11. }

elasticsearch中的效果:

logstash使用配置文件

  1. 官方指南:
  2. https://www.elastic.co/guide/en/logstash/current/configuration.html
  3. 创建配置文件01-logstash.conf
  4. # vim /etc/logstash/conf.d/01-logstash.conf
  5. 文件中添加以下内容
  6. input { stdin { } }
  7. output {
  8. elasticsearch { hosts => ["localhost:9200"] }
  9. stdout { codec => rubydebug }
  10. }
  11. 使用配置文件运行logstash
  12. # /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/01-logstash.conf
  13. 运行成功以后输入以及标准输出结果
  14. 我是木头人
  15. {
  16. "@timestamp" => 2017-05-23T12:22:49.677Z,
  17. "@version" => "1",
  18. "host" => "linux-node1",
  19. "message" => "我是木头人"
  20. }

logstash的数据库类型

  1. 1. Input插件
  2. 权威指南:https://www.elastic.co/guide/en/logstash/current/input-plugins.html
  3. file插件的使用
  4. # vim /etc/logstash/conf.d/file.conf
  5. 添加如下配置
  6. input {
  7. file {
  8. path => "/var/log/messages"
  9. type => "system"
  10. start_position => "beginning"
  11. }
  12. }
  13. output {
  14. elasticsearch {
  15. hosts => ["localhost:9200"]
  16. index => "system-%{+YYYY.MM.dd}"
  17. }
  18. }
  19. 运行logstash指定file.conf配置文件,进行过滤匹配
  20. # /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/file.conf

显示匹配到的日志结果

  1. 来一发配置Java日志的并且把日志的索引按类型做存放,继续编辑file.conf文件
  2. # vim /etc/logstash/conf.d/file.conf
  3. 添加java日志的路径
  4. input {
  5. file {
  6. path => "/var/log/messages"
  7. type => "system"
  8. start_position => "beginning"
  9. }
  10. file {
  11. path => "/var/log/elasticsearch/demon.log"
  12. type => "es-error"
  13. start_position => "beginning"
  14. }
  15. }
  16. output {
  17. if [type] == "system" {
  18. elasticsearch {
  19. hosts => ["localhost:9200"]
  20. index => "system-%{+YYYY.MM.dd}"
  21. }
  22. }
  23. if [type] == "es-error" {
  24. elasticsearch {
  25. hosts => ["localhost:9200"]
  26. index => "es-error-%{+YYYY.MM.dd}"
  27. }
  28. }
  29. }
  30. 运行logstash指定file.conf配置文件,进行过滤匹配
  31. # /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/file.conf
  32. 2. Output插件
  33. 权威指南实例:https://www.elastic.co/guide/en/logstash/current/output-plugins.html
  34. 3. Filter插件
  35. 权威指南实例:https://www.elastic.co/guide/en/logstash/current/plugins-filters-age.html
  36. grok的官方实例
  37. https://www.elastic.co/guide/en/logstash/current/plugins-filters-grok.html
  38. 创建grok.conf的配置文件
  39. # vim /etc/logstash/conf.d/grok.conf
  40. 添加如下内容
  41. input {
  42. stdin {
  43. }
  44. }
  45. filter {
  46. grok {
  47. match => { "message" => "%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}" }
  48. }
  49. }
  50. output {
  51. stdout {
  52. codec => "rubydebug"
  53. }
  54. }
  55. 运行成功以后输入
  56. 55.3.244.1 GET /index.html 15824 0.043
  57. 4. Codec插件
  58. 权威指南实例:https://www.elastic.co/guide/en/logstash/current/codec-plugins.html
  59. multiline多行插件
  60. 多行匹配的实例:https://www.elastic.co/guide/en/logstash/current/plugins-codecs-multiline.html
  61. # vim /etc/logstash/conf.d/mutiline.conf
  62. 添加如下内容
  63. input {
  64. stdin {
  65. codec => multiline {
  66. pattern => "^\["
  67. negate => "true"
  68. what => "previous"
  69. }
  70. }
  71. }
  72. output {
  73. stdout {
  74. codec => "rubydebug"
  75. }
  76. }

利用logstash做nginx的访问日志分析

  1. 安装nginx
  2. # yum -y nginx
  3. 修改nginx.conf配置文件,日志配置成json保存的格式
  4. # vim /etc/nginx/conf.d/nginx.conf
  5. 修改内容如下
  6. 注释掉http段中的access_log
  7. 添加如下内容
  8. log_format json '{"@timestamp":"$time_iso8601",'
  9. '"@version":"1",'
  10. '"client":"$remote_addr",'
  11. '"url":"$uri",'
  12. '"status":"$status",'
  13. '"domian":"$host",'
  14. '"host":"$server_addr",'
  15. '"size":"$body_bytes_sent",'
  16. '"responsetime":"$request_time",'
  17. '"referer":"$http_referer",'
  18. '"ua":"$http_user_agent"'
  19. '}';

  1. server段中添加访问日志以json格式保存
  2. access_log /var/log/nginx/access_json.log json;

  1. 检测配置文件
  2. # nginx -t
  3. 配置文件没有错误,可以启动服务
  4. # systemctl start nginx.service
  5. 打开浏览器请求nginx服务的ip地址或者使用curl命令
  6. # curl -I http://192.168.1.121
  7. 使用tail -f监测nginx的访问日志
  8. # tail -f /var/log/nginx/access_json.log
  9. {"@timestamp":"2017-05-25T13:08:04+08:00","@version":"1","client":"192.168.1.105","url":"/index.html","status":"304","domian":"192.168.1.121","host":"192.168.1.121","size":"0","responsetime":"0.000","referer":"-","ua":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.15 Safari/537.36"}
  10. 创建logstashnginx.conf配置文件
  11. # vim /etc/logstash/cond.d/nginx.conf
  12. 添加如下内容
  13. input {
  14. file {
  15. path => "/var/log/nginx/access_json.log"
  16. codec => json
  17. }
  18. }
  19. output {
  20. stdout {
  21. codec => "rubydebug"
  22. }
  23. }
  24. 执行logstach指定nginx.conf的配置文件来匹配nginx的访问日志
  25. # /usr/share/logstash/bin/logstash -f /etc/logstash/cond.d/nginx.conf
  26. 浏览器或者curl来请求nginxip地址就会有json格式的返回
  27. {
  28. "referer" => "-",
  29. "domian" => "192.168.1.121",
  30. "ua" => "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.15 Safari/537.36",
  31. "type" => "nginx-log",
  32. "url" => "/index.html",
  33. "path" => "/var/log/nginx/access_json.log",
  34. "@timestamp" => 2017-05-25T05:13:29.000Z,
  35. "size" => "0",
  36. "@version" => "1",
  37. "host" => "192.168.1.121",
  38. "client" => "192.168.1.105",
  39. "responsetime" => "0.000",
  40. "status" => "304"
  41. }
  42. 完整的logstash配置文件
  43. # vim /etc/logstash/conf.d/all.conf
  44. 添加如下内容
  45. input {
  46. syslog {
  47. type => "system-syslog"
  48. host => "192.168.1.121"
  49. port => "514"
  50. }
  51. file {
  52. path => "/var/log/messages"
  53. type => "system"
  54. start_position => "beginning"
  55. }
  56. file {
  57. path => "/var/log/elasticsearch/demon.log"
  58. type => "es-error"
  59. start_position => "beginning"
  60. codec => multiline {
  61. pattern => "^\["
  62. negate => "true"
  63. what => "previous"
  64. }
  65. }
  66. file {
  67. path => "/var/log/nginx/access_json.log"
  68. codec => json
  69. type => "nginx-log"
  70. start_position => "beginning"
  71. }
  72. }
  73. output {
  74. if [type] == "system" {
  75. elasticsearch {
  76. hosts => ["localhost:9200"]
  77. index => "system-%{+YYYY.MM.dd}"
  78. }
  79. }
  80. if [type] == "es-error" {
  81. elasticsearch {
  82. hosts => ["localhost:9200"]
  83. index => "es-error-%{+YYYY.MM.dd}"
  84. }
  85. }
  86. if [type] == "nginx-log" {
  87. elasticsearch {
  88. hosts => ["localhost:9200"]
  89. index => "nginx-log-%{+YYYY.MM.dd}"
  90. }
  91. }
  92. if [type] == "system-syslog" {
  93. elasticsearch {
  94. hosts => ["localhost:9200"]
  95. index => "system-syslog-%{+YYYY.MM.dd}"
  96. }
  97. }
  98. }
  99. 运行logstach中的all.conf配置文件
  100. # /usr/share/logstash/bin/logstash -f /etc/logstash/cond.d/all.conf

效果图:

可以识别的logstash

自定义logstash配置分割出来的日志信息

利用logstash做syslog的日志分析

  1. 编辑rsyslog.conf的配置文件
  2. # vim /etc/syslog.conf
  3. 开启以下配置,并配置为本机的ip地址
  4. 源配置:*.* @@remote-host:514
  5. 更改为:*.* @@192.168.1.121:514
  6. 重启rsyslog服务
  7. # systemctl restart rsyslog.service
  8. 创建syslog.conf的配置文件
  9. # vim /etc/logstash/conf.d/syslog.conf
  10. 添加如下内容
  11. input {
  12. syslog {
  13. type => "system-syslog"
  14. host => "192.168.1.121"
  15. port => "514"
  16. }
  17. }
  18. output {
  19. stdout {
  20. codec => "rubydebug"
  21. }
  22. }
  23. 执行logstach运行syslog.conf的监测日志配置文件
  24. # /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/syslog.conf
  25. 重启以后就可以看到输出效果了,把这段代码分别添加到all.conf
  26. input中加入
  27. syslog {
  28. type => "system-syslog"
  29. host => "192.168.1.121"
  30. port => "514"
  31. }
  32. output中加入
  33. if [type] == "system-syslog" {
  34. elasticsearch {
  35. hosts => ["localhost:9200"]
  36. index => "system-syslog-%{+YYYY.MM.dd}"
  37. }
  38. }

kibana中添加system-syslog-*,查看显示效果



动态图添加效果展示

利用logstash做tcp的日志分析

  1. 安装nc服务
  2. # yum -y install nc
  3. 编辑tcp.conf的配置文件
  4. # vim /etc/logstash/conf.d/tcp.conf
  5. 输入以下内容
  6. input {
  7. tcp {
  8. host => "192.168.1.121"
  9. port => "6666"
  10. }
  11. }
  12. output {
  13. stdout {
  14. codec => "rubydebug"
  15. }
  16. }
  17. logstash执行tcp.conf配置文件
  18. 在终端输入测试数据
  19. # nc 192.168.1.121 6666 < /etc/fstab
  20. 显示测试数据的结果
  21. .......
  22. {
  23. "@timestamp" => 2017-05-24T06:45:25.387Z,
  24. "port" => 39212,
  25. "@version" => "1",
  26. "host" => "192.168.1.121",
  27. "message" => "# Created by anaconda on Mon May 15 00:38:20 2017"
  28. }
  29. {
  30. "@timestamp" => 2017-05-24T06:45:25.389Z,
  31. "port" => 39212,
  32. "@version" => "1",
  33. "host" => "192.168.1.121",
  34. "message" => "#"
  35. }
  36. .......
  37. # echo " 磨人小妖精,看俺老孙金箍棒 " | nc 192.168.1.121 6666
  38. {
  39. "@timestamp" => 2017-05-24T06:49:57.005Z,
  40. "port" => 39214,
  41. "@version" => "1",
  42. "host" => "192.168.1.121",
  43. "message" => " 磨人小妖精,看俺老孙金箍棒 "
  44. }

Kibana的安装及使用

安装kibana环境

官方安装手册:https://www.elastic.co/guide/en/kibana/current/install.html

  1. 下载kibanatar.gz的软件包
  2. # wget https://artifacts.elastic.co/downloads/kibana/kibana-5.4.0-linux-x86_64.tar.gz
  3. 解压kibanatar
  4. # tar -xzf kibana-5.4.0-linux-x86_64.tar.gz
  5. 进入解压好的kibana
  6. # mv kibana-5.4.0-linux-x86_64 /usr/local
  7. 创建kibana的软连接
  8. # ln -s /usr/local/kibana-5.4.0-linux-x86_64/ /usr/local/kibana
  9. 编辑kibana的配置文件
  10. # vim /usr/local/kibana/config/kibana.yml
  11. 修改配置文件如下,开启以下的配置
  12. server.port: 5601
  13. server.host: "0.0.0.0"
  14. elasticsearch.url: "http://192.168.1.121:9200"
  15. kibana.index: ".kibana"
  16. 安装screen,以便于kibana在后台运行
  17. # yum -y install screen
  18. # screen
  19. # /usr/local/kibana/bin/kibana
  20. 按住ctrl + a d关闭screen
  21. 打开浏览器并设置对应的index
  22. http://192.168.1.121:5601

设置完毕以后,点create创建

显示效果炫酷屌炸天呀~



来一发动态效果图

kibana创建视图

  1. 创建饼图

  2. 利用markdown创建联系人

  3. Nginx独立ip访问的柱形图

  4. Nginx页面访问次数统计

  5. 显示访问nginx的总次数

  6. 根据时间统计绘制波动图

  7. 把所有的独立视图放到一个dashboard中

实战篇

  1. 安装reids
  2. # yum install -y redis
  3. 修改redis的配置文件
  4. # vim /etc/redis.conf
  5. 修改内容如下
  6. daemonize yes
  7. bind 192.168.1.121
  8. 启动redis服务
  9. # systemctl start redis
  10. 测试redis的是否启用成功
  11. # redis-cli -h 192.168.1.121
  12. 输入info如果有不报错即可
  13. 192.168.1.121:6379> info
  14. # Server
  15. redis_version:3.2.3
  16. redis_git_sha1:00000000
  17. ....
  18. 编辑配置redis-out.conf配置文件,把标准输入的数据存储到redis
  19. # vim /etc/logstash/conf.d/redis-out.conf
  20. 添加如下内容
  21. input {
  22. stdin {}
  23. }
  24. output {
  25. redis {
  26. host => "192.168.1.121"
  27. port => "6379"
  28. db => '6'
  29. data_type => "list"
  30. key => 'demo'
  31. }
  32. }
  33. 运行logstash指定redis-out.conf的配置文件
  34. # /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/redis-out.conf
  35. 运行成功以后,在logstash中输入
  36. hello,redis
  37. 开启另外一个终端链接,并进入到redis查看是否已经成功
  38. # redis-cli -h 192.168.1.121
  39. select 6
  40. keys *
  41. LINDEX demo -1
  42. redis返回的结果
  43. {\"@timestamp\":\"2017-05-24T11:51:15.067Z\",\"@version\":\"1\",\"host\":\"linux-node1\",\"message\":\"hello,redis\"}"
  44. 编辑配置redis-in.conf配置文件,把reids的存储的数据输出到elasticsearch中
  45. # vim /etc/logstash/conf.d/redis-in.conf
  46. 添加如下内容
  47. input {
  48. redis {
  49. host => "192.168.1.121"
  50. port => "6379"
  51. db => '6'
  52. data_type => "list"
  53. key => 'demo'
  54. }
  55. }
  56. output {
  57. elasticsearch {
  58. hosts => ["192.168.1.121:9200"]
  59. index => "redis-demo-%{+YYYY.MM.dd}"
  60. }
  61. }
  62. 运行logstash指定redis-in.conf的配置文件
  63. # /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/redis-in.conf
  64. 把之前的all.conf的配置文件修改一下,变成所有的日志监控的来源文件都存放到redis中,然后通过redis在输出到elasticsearch中
  65. # cd /etc/logstash/conf.d/
  66. # cp all.conf shipper.conf
  67. 更改为如下
  68. input {
  69. syslog {
  70. type => "system-syslog"
  71. host => "192.168.1.121"
  72. port => "514"
  73. }
  74. file {
  75. path => "/var/log/messages"
  76. type => "system"
  77. start_position => "beginning"
  78. }
  79. file {
  80. path => "/var/log/elasticsearch/demon.log"
  81. type => "es-error"
  82. start_position => "beginning"
  83. codec => multiline {
  84. pattern => "^\["
  85. negate => "true"
  86. what => "previous"
  87. }
  88. }
  89. file {
  90. path => "/var/log/nginx/access_json.log"
  91. codec => json
  92. type => "nginx-log"
  93. start_position => "beginning"
  94. }
  95. }
  96. output {
  97. if [type] == "system" {
  98. redis {
  99. host => "192.168.1.121"
  100. port => "6379"
  101. db => "6"
  102. data_type => "list"
  103. key => 'system'
  104. }
  105. }
  106. if [type] == "es-error" {
  107. redis {
  108. host => "192.168.1.121"
  109. port => "6379"
  110. db => "6"
  111. data_type => "list"
  112. key => 'es-error'
  113. }
  114. }
  115. if [type] == "nginx-log" {
  116. redis {
  117. host => "192.168.1.121"
  118. port => "6379"
  119. db => "6"
  120. data_type => "list"
  121. key => 'nginx-log'
  122. }
  123. }
  124. if [type] == "system-syslog" {
  125. redis {
  126. host => "192.168.1.121"
  127. port => "6379"
  128. db => "6"
  129. data_type => "list"
  130. key => 'system-syslog'
  131. }
  132. }
  133. }
  134. 运行logstash指定shipper.conf的配置文件
  135. # /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/shipper.conf
  136. 开启另外一个终端运行redis-cli
  137. # redis-cli -h 192.168.1.121
  138. redis中已有数据
  139. 192.168.1.121:6379> select 6
  140. OK
  141. 192.168.1.121:6379[6]> keys *
  142. 1) "system"
  143. 2) "es-error"
  144. 3) "nginx-log"
  145. 把redis中的数据读取出来,写入到elasticsearch中(需要另外一台主机做实验 ip地址[192.168.1.120])
  146. 编辑配置文件shipper.conf [192.168.1.120]上操作
  147. # vim /etc/logstash/conf.d/shipper.conf
  148. 添加如下内容
  149. input {
  150. redis {
  151. type => "system"
  152. host => "192.168.1.121"
  153. port => "6379"
  154. db => "6"
  155. data_type => "list"
  156. key => 'system'
  157. }
  158. redis {
  159. type => "es-error"
  160. host => "192.168.1.121"
  161. port => "6379"
  162. db => "6"
  163. data_type => "list"
  164. key => 'es-error'
  165. }
  166. redis {
  167. type => "nginx-log"
  168. host => "192.168.1.121"
  169. port => "6379"
  170. db => "6"
  171. data_type => "list"
  172. key => 'nginx-log'
  173. }
  174. redis {
  175. type => "system-syslog"
  176. host => "192.168.1.121"
  177. port => "6379"
  178. db => "6"
  179. data_type => "list"
  180. key => 'system-syslog'
  181. }
  182. }
  183. output {
  184. if [type] == "system" {
  185. elasticsearch {
  186. hosts => ["192.168.1.121:9200"]
  187. index => "system-%{+YYYY.MM.dd}"
  188. }
  189. }
  190. if [type] == "es-error" {
  191. elasticsearch {
  192. hosts => ["192.168.1.121:9200"]
  193. index => "es-error-%{+YYYY.MM.dd}"
  194. }
  195. }
  196. if [type] == "nginx-log" {
  197. elasticsearch {
  198. hosts => ["192.168.1.121:9200"]
  199. index => "nginx-log-%{+YYYY.MM.dd}"
  200. }
  201. }
  202. if [type] == "system-syslog" {
  203. elasticsearch {
  204. hosts => ["192.168.1.121:9200"]
  205. index => "system-syslog-%{+YYYY.MM.dd}"
  206. }
  207. }
  208. }
  209. 注意:
  210. input是从192.168.1.121的redis中获取数据的
  211. output是同样也保存到192.168.1.121中的elasticsearch中,如果要保存到当前的主机上,可以把output中的hosts修改成localhost,如果还需要在kibana中显示,需要在本机上部署kabana,为何要这样做,起到一个松耦合的目的
  212. 192.168.1.121主机上运行logstash命令,用于把数据保存到redis数据库
  213. # /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/shipper.conf
  214. 192.168.1.120主机上运行logstash命令,用于从数据库中读取数据并输出给elasticsearch
  215. # /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/shipper.conf

上线ELK

  1. 1. 日志分类
  2. 系统日志 rsyslog logstash syslog插件
  3. 访问日志 nginx logstash codec json
  4. 错误日志 file logstash mulitline
  5. 运行日志 file logstash codec json
  6. 设备日志 syslog logstash syslog插件
  7. Debug日志 file logstash json 或者 mulitline
  8. 2. 日志标准化
  9. 路径 固定
  10. 格式 尽量json
  11. 3. 系统个日志开始-->错误日志-->运行日志-->访问日志

未完待续....

ELK快速部署及使用~的更多相关文章

  1. Docker环境 ELK 快速部署

    Docker环境 ELK快速部署 环境 Centos 7.4 , Docker version 17.12 Docker至少3GB内存: #内核配置 echo ' vm.max_map_count = ...

  2. ES快速开发,ElasticsearchRestTemplate基本使用以及ELK快速部署

    最近博主有一些elasticsearch的工作,所以更新的慢了些,现在就教大家快速入门,并对一些基本的查询.更新需求做一下示例,废话不多说开始: 1. ES快速上手 es下载:[https://ela ...

  3. 使用Docker快速部署ELK分析Nginx日志实践(二)

    Kibana汉化使用中文界面实践 一.背景 笔者在上一篇文章使用Docker快速部署ELK分析Nginx日志实践当中有提到如何快速搭建ELK分析Nginx日志,但是这只是第一步,后面还有很多仪表盘需要 ...

  4. ELK快速入门(一)基本部署

    ELK快速入门一-基本部署 ELK简介 什么是ELK?通俗来讲,ELK是由Elasticsearch.Logstash.Kibana 三个开源软件组成的一个组合体,这三个软件当中,每个软件用于完成不同 ...

  5. 使用Docker快速部署ELK分析Nginx日志实践

    原文:使用Docker快速部署ELK分析Nginx日志实践 一.背景 笔者所在项目组的项目由多个子项目所组成,每一个子项目都存在一定的日志,有时候想排查一些问题,需要到各个地方去查看,极为不方便,此前 ...

  6. ELK快速入门(二)通过logstash收集日志

    ELK快速入门二-通过logstash收集日志 说明 这里的环境接着上面的ELK快速入门-基本部署文章继续下面的操作. 收集多个日志文件 1)logstash配置文件编写 [root@linux-el ...

  7. ELK快速入门(三)logstash收集日志写入redis

    ELK快速入门三-logstash收集日志写入redis 用一台服务器部署redis服务,专门用于日志缓存使用,一般用于web服务器产生大量日志的场景. 这里是使用一台专门用于部署redis ,一台专 ...

  8. ELK快速入门(五)配置nginx代理kibana

    ELK快速入门五-配置nginx代理kibana 由于kibana界面默认没有安全认证界面,为了保证安全,通过nginx进行代理并设置访问认证. 配置kibana [root@linux-elk1 ~ ...

  9. Linux上oracle精简版客户端快速部署

    RHEL6 + Oracle 11g客户端快速部署 需求:只是用到客户端的sqlplus, sqlldr功能. 方案:用精简版实现客户端的快速部署 1.上传oracle精简版客户端到服务器/tmp目录 ...

随机推荐

  1. ajax 防止重复提交

    参考链接:http://www.hollischuang.com/archives/931 http://blog.csdn.net/everything1209/article/details/52 ...

  2. MariaDB与MySQL

    一.MariaDB安装部署 tar zxvf mariadb-5.5.31-linux-x86_64.tar.gz mv mariadb-5.5.31-linux-x86_64 /usr/local/ ...

  3. Problem 2285 迷宫寻宝 (BFS)

    题目链接:http://acm.fzu.edu.cn/problem.php?pid=2285 Problem 2285 迷宫寻宝 Accept: 323    Submit: 1247Time Li ...

  4. Oracle 12c 单实例安装

    准备工作 实验环境:Redhat 6.6   Oracle 12c 12.2.0.1 1.官网下载 https://www.oracle.com/technetwork/database/enterp ...

  5. MongoDB --- 02. 基本操作,增删改查,数据类型,比较符,高级用法,pymongo

    一.基本操作 . mongod 启动服务端 2. mongo 启动客户端 3. show databses 查看本地磁盘的数据库 4. use 库名 切换到要使用的数据库 5. db 查看当前使用的数 ...

  6. vue filters中使用data中数据

    vue filters中 this指向的不是vue实例,但想要获取vue实例中data中的数据,可以采用下面方法.在 beforeCreate中将vue实例赋值给全局变量app0,然后filters中 ...

  7. css中绝对定位和相对定位的区别

    先说个技巧一般用:子绝父相,即相对定位是给父级的,绝对定位的时候是给子级的. 一:绝对定位 position: absolute;绝对定位:绝对定位是相对于元素最近的已定位的祖先元素(即是设置了绝对定 ...

  8. Java基础知识盘点(二)- 集合篇

    List和Set区别 List和Set都是继承Collection接口 List特点:元素有放入顺序,元素可重复 Set特点:元素无放入顺序,元素不可重复 Set和List对比: Set:检索元素效率 ...

  9. shell date命令

    date命令的语法结构: date [-d][时间运算] [+FORMAT] 先说简单的,[+FORMAT] 部分,主要有如下输出格式: 时间方面: %H : 小时(00..23) %I : 小时(0 ...

  10. Java中的集合类,集合类有哪些,如何增添删除元素,如何遍历

    http://www.cnblogs.com/LittleHann/p/3690187.html import java.util.*; public class TestCollection { p ...