• ELK日志系统


    ELK日志系统
    一、ELS
    1、ELS概念
    ELK:是一套完整的日志集中处理方案

    E:ElasticSearch ES 分布式索引型非关系数据库 作用:存储logstash输出的日志 全文检索引擎 保存的格式是json格式

    L:Logstash 基于java语言开发,作用:数据收集引擎。日志的收集,可以对数据进行过滤、分析、汇总,以标准格式输出。

    K:Kiabana 是ElasticSearch的可视化工具,对ES存储的数据进行可视化展示、分析和检索

    优点:日志集中管理

    ELK F K

    F:filebeat 轻量级的开源日志文件数据搜集器,logstash 占用系统资源比较大,属于重量级,有了filebeat可以节省资源,可以通过filebeat好logstash实现远程数据收集,但是filebeat不能对数据进行标准输出,不能输出为es格式的数据,所以需要logstash把filebeat数据做标准化处理

    K:kafka 消息队列

    2、ELK的工作原理
    2.1 在所有需要收集日志的服务器上部署Logstash;或者先将日志进行集中化管理在日志服务器上,在日志服务器上部署 Logstash。
    2.2 Logstash 收集日志,将日志格式化并输出到 Elasticsearch 群集中。
    2.3 Elasticsearch 对格式化后的数据进行索引和存储。
    2.4 Kibana 从 ES 群集中查询数据生成图表,并进行前端数据的展示。

    总结:logstash作为日志搜集器,从数据源采集数据,并对数据进行过滤,格式化处理,然后交由Elasticsearch存储,kibana对日志进行可视化处理。

    二、搭建ELK架构
    1、安装ELK
    192.168.100.11 logstash kibana nginx/http 4/8G

    192.168.100.12 es1 2/4G

    192.168.100.13 es2 2/4G

    1. 一、# test1-1test1-2test1-3
    2. systemctl stop firewalld
    3. setenforce 0
    4. yum -y install ntpdate
    5. ntpdate ntp.aliyun.com
    6. date
    7. 二、# test1-2 test1-3
    8. 1、环境准备
    9. # 设置java环境
    10. yum -y install java
    11. java -version
    12. 2、部署 Elasticsearch 软件
    13. 1)#安装elasticsearch—rpm包
    14. cd /opt # 拖elasticsearch-6.7.2.rpm包
    15. rpm -ivh elasticsearch-6.7.2.rpm
    16. 2)#修改elasticsearch主配置文件
    17. cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak
    18. vim /etc/elasticsearch/elasticsearch.yml
    19. set nu
    20. 17 取消注释,指定集群名字 cluster.name: my-elk-cluster
    21. 23 取消注释,指定节点名字 Node1节点为node1,Node2节点为node2 #noder1test1-1的,node2test1-2
    22. 33 取消注释,指定数据存放路径 path.data: /var/lib/elasticsearch
    23. 37 取消注释,指定日志存放路径 path.logs: /var/log/elasticsearch
    24. 43 # 保持注释,禁止使用打开空间。取消注释的话,为了避免es使用swap交换分区,bootstrap.memory_lock: true
    25. 55 取消注释,设置监听地址,0.0.0.0代表所有地址 network.host: 0.0.0.0
    26. 59 取消注释 ELS的默认端口为9200
    27. 23行下增加
    28. node.master: true false # test1-1的为true test1-2的为false
    29. node.data: true # test1-1test1-2的均为true
    30. 60行下增加
    31. transport.tcp.port: 9300 # es集群内部通信的端口
    32. 73 取消注释 discovery.zen.ping.unicast.hosts: ["192.168.100.12 9300","192.168.100.13 9300"] # 冒号后改为上述冒号后内容
    33. wq!
    34. grep -v "^#" /etc/elasticsearch/elasticsearch.yml # 检查非#以外的配置文件内容
    35. 3)启动elasticsearch,查看是否成功开启
    36. systemctl restart elasticsearch.service
    37. systemctl enable elasticsearch.service
    38. netstat -antp | grep 9200
    39. 4)查看节点信息
    40. 浏览器访问 http://192.168.100.12:9200 和 http://192.168.100.13:9200
    41. 查看Node1、和Node2的信息
    42. 浏览器访问 http://192.168.233.12:9200/_cluster/health?pretty 、 http://192.168.233.13:9200/_cluster/health?pretty查看群集的健康情况,可以看到 status 值为 green(绿色),表示节点健康运行
    43. #使用上述方式查看群集的状态对用户并不友好,可以通过安装 Elasticsearch-head 插件,可以更方便地管理群集。
    44. 3、安装 Elasticsearch-head 插件
    45. yum install gcc gcc-c++ make -y # 部署安装环境,node和phantomjs基于java环境运行
    46. 1)编译安装node
    47. cd /opt # 把node-v8.2.1.tar.gz拖进去
    48. tar zxvf node-v8.2.1.tar.gz
    49. cd node-v8.2.1/
    50. ./configure
    51. make -j 2 && make install
    52. 2)安装 phantomjs
    53. cd /opt # 把 phantomjs-2.1.1-linux-x86_64.tar.bz2拖进去
    54. tar jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2
    55. cd /opt/phantomjs-2.1.1-linux-x86_64/bin
    56. cp phantomjs /usr/local/bin
    57. 3)安装 Elasticsearch-head 数据可视化工具
    58. cd /opt # 把 elasticsearch-head-master.zip拖进去
    59. unzip elasticsearch-head-master.zip
    60. cd elastic??
    61. cd elasticsearch-head-master/
    62. npm config set registry http://registry.npm.taobao.org/ # 指定为淘宝镜像
    63. npm install # 安装依赖包
    64. 4)修改 Elasticsearch 主配置文件
    65. vim /etc/elasticsearch/elasticsearch.yml
    66. --在末尾行添加一下内容--
    67. http.cors.enabled: true # 开启跨域访问支持,默认为false
    68. http.cors.allow-origin: "*" # 允许跨域访问的域名地址为所有地址
    69. wq!
    70. systemctl restart elasticsearch
    71. netstat -antp | grep 9200
    72. 5)启动 elasticsearch-head 服务
    73. cd /opt/elasticsearch-head-maste
    74. npm run start &
    75. # 会出现很长一串,最后是9100,表示elasticsearch-head 监听的端口是 9100
    76. netstat -natp |grep 9100
    77. 6)通过 Elasticsearch-head 查看 Elasticsearch 信息
    78. 浏览器访问192.168.100.12:9100192.168.100.13:9100 把localhost换成ip地址,集群健康值显示为绿色表示成功
    79. (7)插入索引
    80. curl -X PUT 'localhost:9200/index-demo/test/1?pretty&pretty' -H 'content-Type: application/json' -d '{"user":"zhangsan","mesg":"hello world"}'
    81. 三、# test1-1
    82. 1、ELK Logstash部署
    83. 1)安装Apahce服务(httpd)
    84. yum -y install httpd
    85. systemctl start httpd
    86. 2)安装Java环境
    87. yum -y install java
    88. java -version
    89. 3)安装logstash
    90. cd /opt # 把 logstash-6.7.2.rpm 拖进去
    91. rpm -ivh logstash-6.7.2.rpm
    92. systemctl start logstash.service
    93. systemctl enable logstash.service
    94. ln -s /usr/share/logstash/bin/logstash /usr/local/bin/
    95. # logstash的默认工作目录为:/etc/logstash/conf.d 在配置文件中为path.config: /opt/log,也可以指定logstash的工作目录,在配置文件中修改
    96. 4)测试 Logstash
    97. logstash -e 'input { stdin{} } output { stdout{} }'
    98. # 出现很大一长串,只要结尾出现Successfully和端口9600即成功,可以在里面输入
    99. # www.baidu.com
    100. # www.sina.com.cn
    101. # www.google.com
    102. ## 实例通过正常,ctrl+z结束
    103. 5)修改Logstash到Elasticsearch模块
    104. logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["192.168.100.12:9200","192.168.100.13:9200"] } }' --path.data /opt/test1
    105. ## 出现很大一长串,只要结尾出现Successfully和端口代表成功
    106. # www.baidu.com
    107. # www.sina.com.cn
    108. # www.google.com
    109. ## 此时没有标准输出的实例,实例到Elasticsearch模块
    110. 6
    111. 回到浏览器访问的页面,刷新,出现Logstash-2024.08.01模块
    112. 2、创建日志收集系统
    113. test1-1
    114. cd /etc/logstash/conf.d # cond.d工作目录
    115. vim system.conf
    116. input {
    117. file{
    118. path =>"/var/log/messages"
    119. type =>"system"
    120. start_position =>"beginning"
    121. # 从结尾开始end
    122. }
    123. }
    124. output {
    125. elasticsearch {
    126. hosts =>["192.168.100.12:9200","192.168.100.13:9200"]
    127. index =>"system-%{+YYYY.MM.dd}"
    128. }
    129. }
    130. wq!
    131. cat system.conf
    132. chmod 777 /var/log/messages
    133. logstash -f system.conf --path.data /opt/test2 &
    134. # 后台运行回车即可
    135. 3、安装kibana
    136. test1-1
    137. cd /opt # 拖包
    138. rpm -ivh kibana-6.7.2-x86_64.rpm
    139. vim /etc
    140. 2 取消注释
    141. 7 localhost改0.0.0.0
    142. 28 取消注释 elasticsearch.hosts: ["http://192.168.100.12:9200","192.168.100.13:9200"]
    143. 96 取消注释 日志路径 logging.dest: stdout改logging.dest: /var/log/kibana.log
    144. 113 取消注释 i18n.locale: "en"改为i18n.locale: "zh-CN" 表示使用中文
    145. 37 取消注释 打开索引名称
    146. wq!
    147. touch /var/log/kibana.log
    148. chown kibana.kibana /var/log/kibana.log
    149. systemcl restart kibana
    150. systemcl enable kibana
    151. netstat -antp | grep 5601
    152. 页面访问192.168.100.11:5601
    153. 管理——索引管理——索引模式——创建索引——输入"system-*"——下一步——字段选择"@timestamp"——创建索引模式——点击左栏中的"discover"可查看日志信息

    2、补充内容
    node:基于谷歌浏览器的运行环境

    phantmjs:虚拟浏览器

    es-head-master:es的独立可视化工具,可以实现分片索引数据的可视化展示

    logstash -e ‘input { stdin{} } output { elasticsearch { hosts=>[“192.168.100.12:9200”,“192.168.100.13:9200”] } }’

    1、es的主从和数据模式

    node.master:true:es数据库的主从类型,主是true,非主就是false

    es如何创建、修改、删除数据、数据管理?

    通过http的方式

    post方式修改数据

    创建数据命令

    curl -X PUT 'localhost:9200/index-demo/test/1?pretty&pretty' -H 'content-Type: application/json' -d '{"user":"zhangsan","mesg":"hello world"}'
    

    localhost:9200:对应的就是本地数据库的地址,可以是ip+端口

    index-demo :创建索引分片的名称

    test :数据的名称

    1 :数据的id字段

    ?pretty&pretty :参数设定为json格式

    -d :后面跟数据的具体内容

    '{"user":"zhangsan","mesg":"hello world"}' :表示真正的数据内容

    修改数据命令

    curl -X POST 'localhost:9200/index-demo/test/1/_update?pretty' -H 'Content-Type: application/json' -d '{"doc": {"user": "zhangsan","mesg":"hello1 world1"} }'
    

    删除数据命令

    curl -X DELETE 'localhost:9200/index-demo/test/1?pretty&pretty' -H 'content-Type: application/json' -d '{"user":"zhangsan","mesg":"hello1 world1"}'
    

    3、收集业务日志

    1. # test1-1
    2. cd /etc/logstash/conf.d
    3. vim http.conf
    4. input {
    5. file {
    6. path => "/etc/httpd/logs/access_log"
    7. type => "access"
    8. start_position => "beginning"
    9. }
    10. file {
    11. path => "/etc/httpd/logs/error_log"
    12. type => "error"
    13. start_position => "beginning"
    14. }
    15. }
    16. output {
    17. if [type] == "access" {
    18. elasticsearch {
    19. hosts => ["192.168.100.12:9200","192.168.100.13:9200"]
    20. index => "apache_access-%{+YYYY.MM.dd}"
    21. }
    22. }
    23. if [type] == "error" {
    24. elasticsearch {
    25. hosts => ["192.168.100.12:9100","192.168.100.13:9100"]
    26. index => "apache_error-%{+YYYY.MM.dd}"
    27. }
    28. }
    29. }
    30. logstash -f http.conf --path.data /opt/test数字 & # 可以查看一下/opt目录,创建一个没有的test数字

    API接口:软件内部代码之间通信的接口,代码的连接,代码之间的内部端口

    端口是对外提供访问程序的内容结构

    4、filebeat收集业务日志
    nginx1 192.168.100.10

    1. # nginx1
    2. 1、关闭防火墙和访问nginx
    3. systemctl restart nginx
    4. systemctl stop firewalld
    5. setenforce 0
    6. curl 192.168.100.10
    7. 2、安装filebea软件
    8. cd /opt # 拖包filebeat-6.7.2-linux-x86_64.tar.gz
    9. tar -xf filebeat-6.7.2-linux-x86_64.tar.gz
    10. mv filebeat-6.7.2-linux-x86_64 /usr/local/filebeat
    11. cd /usr/local/filebeat
    12. cp filebeat.yml filebeat.yml.bak
    13. 3、修改filebea.yml配置文件
    14. vim filebeat.yml
    15. - type: log
    16. enabled: true
    17. paths:
    18. - /var/log/nginx/access.log
    19. - /var/log/nginx/error.log
    20. #开启日志收集,以及确定日志文本的路径
    21. #指定标签和发送到目标主机的logstash
    22. tags: ["nginx"]
    23. fielsd:
    24. service_name:192.168.100.10_nginx
    25. log_type:nginx
    26. from:192.168.100.10
    27. 一直往下
    28. #output.elasticsearch:
    29. #Array of hosts to connect to.
    30. #hosts: ["localhost:9200"]
    31. output.logstash:
    32. # The Logstash hosts
    33. hosts: ["192.168.100.11:5055"]
    34. #5044是logstash默认的端口,只要是logstash主机上没有被占用的端口都可以,netstat -antp | grep 5055 查看一下
    35. wq!
    36. # test1-1
    37. cd /etc/logstash/conf.d
    38. vim nginx_10.conf
    39. input {
    40. beats { port => "5045"}
    41. }
    42. output {
    43. if "nginx" in [tags] {
    44. elasticsearch {
    45. hosts => ["192.168.100.12:9200","192.168.100.13:9200"]
    46. index =>"%{[fields][service_name]}-%{+YYYY.MM.dd}"
    47. }
    48. }
    49. }
    50. wq!
    51. 先开启filebeat,开启logstash!
    52. # nginx1
    53. cd /usr/local/filebeat
    54. nohup ./filebeat -e -c filebeat.yml > filebeat.out &
    55. ------------------------------------------------------------------------------------------------------------
    56. -e 输出到标准输出
    57. -c 指定配置文件
    58. nohup 在系统的后台运行,不会因为终端的关闭导致程序停止运行
    59. 可以把运行的日志保存到指定文件
    60. # test1-1
    61. logstash -f http.conf --path.data /opt/test数字 & # 创建一个/opt下没有的

    filebeat作用:

    1、可以在本机收集日志

    2、也可以远程收集日志

    3、轻量级的日志收集系统,可以在非java环境运行

    logstash是在jvm环境中运行,资源消耗很大,启动一个logstash要消耗500M左右的内存,filebeat只消耗10M左右的内存

    7、实验:在mysql上yum安装httpd和nginx、filebeat

    mysql1-7 192.168.100.17

    1. # mysql1-7
    2. systemctl stop firewalld
    3. setenforce 0
    4. vim /etc/my.cnf
    5. # 开启mysql二进制文件
    6. general_log=ON
    7. general_log_file=/usr/local/mysql/data/mysql_general.log
    8. wq!
    9. systemctl restart mysqld
    10. 修改nginx或httpd的端口
    11. curl 192.168.100.17:85 # 测试httpd访问,端口修改为85
    12. curl 192.168.100.17 # 测试nginx访问
    13. mysql -u root -p123456 # 测试mysqld访问
    14. cd /opt # 把filebeat-6.7.2-linux-x86_64.tar.gz的包拖进去
    15. tar -xf filebeat-6.7.2-linux-x86_64.tar.gz
    16. mv filebeat-6.7.2-linux-x86_64 /usr/local/filebeat
    17. cd /usr/local/filebeat
    18. cp filebeat.yml filebeat.yml.bak
    19. 修改filebeat.yml配置文件
    20. vim filebeat.yml
    21. - type: log
    22. enabled: true
    23. paths:
    24. - /etc/httpd/logs/access_log
    25. - /etc/httpd/logs/error_log
    26. tags: ["httpd"]
    27. fielsd:
    28. service_name:192.168.100.17_httpd
    29. log_type:httpd
    30. from:192.168.100.17
    31. - type: log
    32. enabled: true
    33. paths:
    34. - /var/log/nginx/access.log
    35. - /var/log/nginx/error.log
    36. tags: ["nginx"]
    37. fielsd:
    38. service_name:192.168.100.17_nginx
    39. log_type:nginx
    40. from:192.168.100.17
    41. - type: log
    42. enabled: true
    43. paths:
    44. - /usr/local/mysql/data/mysql_general.log
    45. tags: ["mysqld"]
    46. fielsd:
    47. service_name:192.168.100.17_mysqld
    48. log_type:mysqld
    49. from:192.168.100.17
    50. 一直往下
    51. output.elasticsearch: # 注释 #output.elasticsearch:
    52. #Array of hosts to connect to.
    53. hosts: ["localhost:9200"] # 注释 #hosts: ["localhost:9200"]
    54. #output.logstash: # 取消注释 output.logstash:
    55. # The Logstash hosts
    56. #hosts: ["localhost:5044"] # 取消注释 hosts: ["192.168.100.11:5055"]
    57. #5044是logstash默认的端口,只要是logstash主机上没有被占用的端口都可以,netstat -antp | grep 5055 查看一下
    58. wq!
    59. # test1-1
    60. cd /etc/logstash/conf.d
    61. vim hnm.conf #注意需要以.conf为结尾
    62. input {
    63. beats { port => "5055"}
    64. }
    65. output {
    66. if "httpd" in [tags] {
    67. elasticsearch {
    68. hosts => ["192.168.100.12:9200","192.168.100.13:9200"]
    69. index =>"%{[fields][service_name]}-%{+YYYY.MM.dd}"
    70. }
    71. }
    72. if "nginx" in [tags] {
    73. elasticsearch {
    74. hosts => ["192.168.100.12:9200","192.168.100.13:9200"]
    75. index =>"%{[fields][service_name]}-%{+YYYY.MM.dd}"
    76. }
    77. }
    78. if "mysqld" in [tags] {
    79. elasticsearch {
    80. hosts => ["192.168.100.12:9200","192.168.100.13:9200"]
    81. index =>"%{[fields][service_name]}-%{+YYYY.MM.dd}"
    82. }
    83. }
    84. }
    85. wq!
    86. # mysql1-7
    87. cd /usr/local/filebeat
    88. nohup ./filebeat -e -c filebeat.yml > filebeat.out &
    89. # test1-1
    90. logstash -f hnm.conf --path.data /opt/test数字 &
    91. # mysql1-7
    92. tail -f filebeat.out
    93. 浏览器访问192.168.100.12:9100192.168.100.12:9100。刷新,出现192.168.100.17_httpd-当前日期、192.168.100.17_nginx-当前日期、192.168.100.17_mysqld-当前日期
    94. # kibana
    95. http://192.168.100.11:5601/
    96. 管理--索引模式--创建索引模式--索引模式--下一步--@timestamp--创建索引模式--discovery--访问httpd或者nginx或者mysqld:日志更新
  • 相关阅读:
    从零开始的Django框架入门到实战教程(内含实战实例) - 09 初试Ajax之任务界面(学习笔记)
    VBA操作Excl表格常用命令
    A股风格因子看板 (2023.09 第07期)
    Redis系列2:数据持久化提高可用性
    计算机组成原理_笔记_第4章:指令系统
    C++常用stl
    人工智能入门(一):基于Pytorch的手写数字识别模型
    Python 利用pandas 和 matplotlib绘制柱状图
    上半年Java岗面试总结:Java+并发+Spring+MySQL+分布式+Redis+算法+JVM等
    女生做测试工程师好还是需求分析师好?
  • 原文地址:https://blog.csdn.net/JeremyHao07/article/details/140847326