我们平时分析 log 直接在日志文件中 grep,awk 就可以获得自己想要的信息, 此方法效率低下, 生产中需要集中化的日志管理, 所有服务器上的日志收集汇总
Elasticsearch
一个节点 (node) 就是一个 Elasticsearch 实例, 一个集群 (cluster) 由一个或多个节点组成, 它们具有相同的 cluster.name, 它们协同工作, 分享数据和负载. 当加入新的节点或者删除一个节点时, 集群就会感知到并平衡数据.
集群中一个节点会被选举为主节点(master), 它将临时管理集群级别的一些变更, 例如新建或删除索引, 增加或移除节点等. 主节点不参与文档级别的变更或搜索, 这意味着在流量增长的时候, 该主节点不会成为集群的瓶颈.
做为用户, 我们能够与集群中的任何节点通信, 包括主节点. 每一个节点都知道文档存在于哪个节点上, 它们可以转发请求到相应的节点上. 我们访问的节点负责收集各节点返回的数据, 最后一起返回给客户端. 这一切都由 Elasticsearch 处理.
一个完整的集中式日志系统, 需要包含以下几个主要特点:
收集 - 能够采集多种来源的日志数据
传输 - 能够稳定的把日志数据传输到中央系统
存储 - 如何存储日志数据
分析 - 可以支持 UI 分析
警告 - 能够提供错误报告, 监控机制
fluentd 基于 CRuby 实现, 并对性能表现关键的一些组件用 C 语言重新实现, 整体性能不错.
fluentd 支持所有主流日志类型, 插件支持较多, 性能表现较好
logstash 支持所有主流日志类型, 插件支持最丰富, 可以灵活 DIY, 但性能较差, JVM 容易导致内存使用量高.
Elasticsearch 是个开源分布式搜索引擎, 提供搜集, 分析, 存储数据三大功能
Kibana 也是一个开源和免费的工具, Kibana 可以为 td-agent 和 ElasticSearch 提供的日志分析友好的 web 界面, 可以帮助汇总, 分析和搜索重要数据日志.
安装流程:
两个 node 都下载
- #yum install java 下载 java 环境
- #java -version
- #wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.3.1.rpm
- #rpm -ih elasticsearch-6.3.1.rpm
- Node1(主)
- #vim /etc/elasticsearch/elasticsearch.yml
- cluster.name: my-application // 集群名称
- node.name: node-1 // 主机名称
- node.master: true // 主为 true
- network.host: 172.21.0.9 // 主机 ip
- http.port: 9200 // 端口
- Node2 (从)
- #vim /etc/elasticsearch/elasticsearch.yml
- cluster.name: my-application
- node.name: node-2
- node.master: false
- network.host: 172.21.0.37
- http.port: 9200discovery.zen.ping.unicast.hosts: ["host1", "172.21.0.9"] // 集群
- #/etc/init.d/elasticsearch start
- #/etc/init.d/elasticsearch status
- #curl http://172.21.0.9:9200/_cat/health // 测试
- #curl http://172.21.0.9:9200/_cat/nodes // 测试
- Fluentd (tdagent) // 收集那台机器的 log 在那安装
- #wget http://packages.treasuredata.com.s3.amazonaws.com/3/redhat/7/x86_64/td-agent-3.2.0-0.el7.x86_64.rpm
- #rpm -ivh td-agent-3.2.0-0.el7.x86_64.rpm --force --nodeps
- #yum install -y libcurl-devel
- #/opt/td-agent/embedded/bin/fluent-gem install fluent-plugin-elasticsearch
- #cd /etc/td-agent/
- >#cat td-agent.conf // 内容可以直接替换
- <source>
- @type forward
- port 24224
- </source>
- ####################################
- <source>
- @type tail
- path /var/log/httpd/access_log
- pos_file /var/log/td-agent/httpd-access.log.pos
- tag apache.access
- <parse>
- @type apache2
- </parse>
- </source>
- ####################################
- <match debug.*>
- @type stdout
- </match>
- ####################################
- <match .**>
- @type copy
- <store>
- @type elasticsearch
- host 172.21.0.9
- port 9200
- logstash_format true
- logstash_prefix fluentd-${tag}
- logstash_dateformat %Y%m%d
- include_tag_key true
- type_name access_log
- tag_key @log_name
- flush_interval 1s
- </store>
- <store>
- @type stdout
- </store>
- </match>
- #/etc/init.d/td-agent restart
- #chmod 777 -R /var/log/httpd/
- #tail -f /var/log/td-agent/td-agent.log // 测试
- #curl 'http://172.21.0.9:9200/_cat/indices?v' // 测试
- Kibana
- #wget https://artifacts.elastic.co/downloads/kibana/kibana-6.3.1-x86_64.rpm
- #rpm -ivh kibana-6.3.1-x86_64.rpm
- #vim /etc/kibana/kibana.yml
- server.port: 5601 // 端口
- server.host: "172.21.0.9"
- elasticsearch.url: "http://172.21.0.9:9200/"
- kibana.index: ".kibana"
- #/etc/init.d/kibana restart // 重启服务
- #tail -f /var/log/kibana/kibana.stderr // 查看
浏览器访问 172.21.0.9:5601
然后在 kibana 客户端 web 界面设置 Fluentd-log 选项
附加'elasticsearch 常用的操作'
查看当前集群的状态
curl 'http://IP:PORT/_cat/health?v http://ip:PORT/_cat/health?v'
2. 查看当前 node
curl 'http://IP:PORT/_cat/nodes?v http://ip:PORT/_cat/nodes?v'
3. 查看所有的 index
curl 'http://IP:PORT/_cat/indices?v http://ip:PORT/_cat/indices?v'
4. 创建一个 index
curl -XPUT 'IP:PORT/customer?pretty'
5. 创建一个 index 带有文档的
curl -XPUT 'IP:PORT/customer/external/1?pretty' -d '{"name":"John Doe"}'
6. 删除一个 index
- curl -XDELETE 'IP:PORT/customer?pretty'
- curl -XDELETE 'IP:PORT/onland-*?pretty'
来源: http://www.bubuko.com/infodetail-2708960.html